diff --git a/xiaofang/Assets/Obi.meta b/xiaofang/Assets/Obi.meta new file mode 100644 index 00000000..a1435212 --- /dev/null +++ b/xiaofang/Assets/Obi.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 36112b76e54ae47b48e48d646aee4ed0 +folderAsset: yes +timeCreated: 1435850625 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/CHANGELOG_rope.txt b/xiaofang/Assets/Obi/CHANGELOG_rope.txt new file mode 100644 index 00000000..2c68695a --- /dev/null +++ b/xiaofang/Assets/Obi/CHANGELOG_rope.txt @@ -0,0 +1,525 @@ +# Change Log +All notable changes to “Obi - Advanced ropes for Unity” will be documented in this file. + +## [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 +- Rendering system is now fully multithreaded, integrated with the solver backend. + +### Removed +- Native library based 'Oni' solver backend. +- ObiUpdater and all derived classes have been removed. + +## [6.5.1] + +### Added +- Support for holes in terrain colliders. + +## [6.5] + +### Added +- Improved constraint coloring, which results in much faster blueprint generation. + +### Fixed +- Memory leak when using collision constraints in the Burst backend. +- Performance drop when using collision constraints in Burst >1.7 +- Incorrect lighting on particles in the blueprint editor, when opening the editor without having previously opened any scene. + +## [6.4] + +### Added +- Support for configurable enter play mode (domain and scene reload disabling). +- Support for in-editor hot reloading. +- Numerical fields to edit control point position and tangents added to the path editor. + +### Changed +- Better path editor integration using Unity's editor custom tool API. +- GrapplingHook sample scene now features a hook rope that extends over time, instead of extending instantly. +- Reduced memory allocation in ObiPathSmoother Decimate() method. +- Introduced a job handle pool to avoid runtime allocation of handles by both Burst and Oni backends. +- Constraint padding array in Burst solver has been turned into a member variable instead of allocating anew it every frame. +- Collision and friction batches are pooled instead of allocated every frame. + +### Fixed +- InvalidOperationException when performing certain spatial queries with jobs debugger enabled in the Burst backend. +- ObiBone collision category was internally resetting to zero upon pressing play. +- Particle render mode in blueprint editor wasn't updated every frame under specific circumstances. + +## [6.3] + +### Added +- New ObiBone actor, creates a particle-based representation of a bone hierarchy and simulates it using rod constraints. +- Built-in support for applying solver gravity in world-space. + +### Fixed +- Bug in attachments: prefab modifications were not being applied to the component. +- Slight reduction in solver memory allocation. +- Object disposed exception when using contact callbacks with a non-visible solver. + +## [6.2] + +#IMPORTANT: If updating from an older version, you’ll need to readjust collision filtering in your scenes. +Phase-based collision filtering has been replaced by mask/categroy based system. + +### Added +- New spatial query API, that allows to perform efficient distance, overlap and raycast queries. + +### Changed +- Collision phase filtering has been replaced by a category/mask system. If you upgrade existing projects to Obi 6.2, you will have to set up categories and masks appropiately. + + +## [6.1] + +### Added +- RopeCutting sample scene, where screen-space line dragged by the user is used to cut multiple 3D ropes. +- Snake sample scene, where a snake-like character implemented using a rope can be controlled by the user. + +### Changed +- Decreased minimum error in distance fields to 1e-07 + +### Fixed +- Bug in Oni backend: collision stickiness resulted in rapid particle separation from the collision surface. +- Bug that caused NaN velocity assignments to rigidbodies after removing all actors from a solver. + +## [6.0.1] + +### Fixed +- Bug in Burst backend, resulting in InvalidOperationException when enabling Burst safety checks. +- Bug in ObiSolver that caused particleToActor array entries to be null. + +## [6.0] + +### Added +- Optional simplex-based surface collion pipeline for more accurate collision detection/response. +- Predictive variable-step constraint solving that makes syncing Unity's physics no longer necessary when using substeps. +- Amount of CCD is now adjustable per-solver. +- Collision margin is now adjustable per-solver. +- Bend and bend/twist constraints now support plasticity. +- One-sided collision detection between particles. Particles with one-sided collision detection will always project penetrating particles to the side defined by their associated normal. + +### Fixed +- Bug in dynamic particle attachments that would case colliders parented under a solver to lose their attachments upon enabling/reenabling a solver. + +### Changed +- Contacts "particle" and "other" have been renamed to "bodyA" and "bodyB". bodyB might be a simplex or collider index, depending on the contact type.To access +particle indices from simplex indices, use the solver.simplices array. + +## [5.6.2] + +### Fixed +- Missed collisions using certain meshes for MeshColliders, due to a bug in bounding interval hierarchy generation. +- Corrected orientation error in the first particle of rods, when there's multiple rods in a solver. +- Corrected rendering error in rods, when there's multiple rods in a solver. + +## [5.6.1] + +### Fixed +- Bug in Burst backend: solver bounding box size was typically underestimated. +- Bug in Burst backend: when using volume constraints: "InvalidOperationException: The NativeContainer ApplyVolumeConstraintsBatchJob.particleIndices has not been assigned or constructed" +- Bug in Burst backend: not releasing native arrays when empty solvers -with zero actors in them- are present in the scene. +- Bug in Oni backend: volume constraints not working properly when multiple actors are present in the solver. +- Fixed crash when using ObiLateUpdater or ObiLateFixedUpdater with the Burst backend. +- Reduced GC allocation in dynamic particle attachments. +- Fixed bug in Skin constraints, that caused them to fail restricting particle movement in certain circumstances. + +### Changed +- Updated Oni iOS library to XCode 12.1. Make sure to use XCode 12.1 or up to build for iOS when using the Oni backend. +- ObiKinematicVelocities component has been removed. Its functionality is now built into the engine, and automatically used for kinematic rigidbodies. + +### Added +- Sample ObiContactDispatcher component, that will call custom enter/stay/exit contact events. +- Support for multiple solvers in sample script in ObiContactGrabber. +- Added util LookAroundCamera component. + +## [5.6] + +### Added +- Faster SDF generation. +- New sample scene. + +### Fixed +- Bug that causes out of bounds access when dinamically adding/removing colliders at runtime. +- Bug that prevented stitch constraints from working first time they were enabled. +- Offset in particle selection brush on high density screens. + +### Changed +- Constraint batches of multiple actors are now merged together. This greatly reduces the amount of dispatched jobs and improves performance on both backends. +- Colliders no longer have a "use distance fields" boolean value, they will always use the SDF as long as they have one. + +## [5.5] + +### Added +- Backend system: abstracts the underlying particle-based physics engine used. To the native, built-in engine (Oni), we have added a Burst-based implementation that +will run on all platforms supported by Burst. + +### Changed +- Improved path smoother, line and extruded renderer performance. + +## [5.4] + +### Fixed +- Bug that caused a crash when using Obi in conjunction with Mirror networking system (NetworkIdentity component). +- Bug that could cause a crash when disabling an actor under a disabled solver. +- Bug that prevented self-collisions to work correctly between particles created at runtime by a ObiRopeCursor. + +### Changed +- Recompiled iOS libraries using XCode 11.3.1, to circumvent bitcode compatibility issues now that XCode 11.4 and up have a bug that cause linking against Obi to fail. + + +## [5.3] + +### Added +- Added adaptive rendering decimation to ObiPathSmoother, controllable using a curvature threshold. +- Greatly increased numerical precision for rigidbody interaction when solvers are far away from the origin. +- 2D colliders now span infinitely in the Z axis. + +### Fixed +- Issue in the ObiStitcher editor that picked up incorrect particles when adding stitches. +- Issue that caused a 1-frame delay for collider geometry parented inside a solver. +- Issue in ObiParticleDragger that caused incorrect behavior with multiple solvers. +- Bug in particle advection, that assumed diffuse particle positions to be expreseed in world space. Now advection works correctly +for solvers not positioned at 0,0,0. + +## [5.2] + +### Added +- Rope tear callback (cloth.OnRopeTorn) +- Function to reset particle positions orientations and and velocities in an actor (actor.ResetParticles()) +- Added support for ObiRopeLineRenderer in SRPs. + +### Fixed +- Issue with inertia rotations, that caused wrong inertia tensors for complex compound colliders. +- Issue in particle attachments, that forced to call Bind() manually after changing their target or particle group at runtime. + + +## [5.1] + +### Added +-Smooth initial overlap resolution by using clamped depenetration velocity. +-Actors now automatically create a solver root when editing them in prefab mode. +-Brought back rope mesh baking. + +### Fixed +- Bug that caused solvers with no actors in their hierarchy to freeze Unity when updated by a fixed updater. +- Bug that prevented multiple colliders in the same object to be notified of transform changes. + +### Fixed +-Fixed bug that caused null ref when attempting to edit a rope with no blueprint. + +## [5.0] + +#IMPORTANT: You’ll need to re-create all your 4.x ObiRope components. Data serialization and workflows are significantly different from previous versions. + +### Changed +- Introduced blueprints: particle/constraint object representations are now stored in assets called "blueprints" (as opposed to being stored in the actor itself, as in previous versions). This improves +memory consumption, editor performance, completely separates data from the runtime components that operate on it, and enables easier and faster workflow. +- Non-linear, non-destructive rope editing with instant feedback. +- Simplified underlying engine, constraints are grouped in batches using graph coloring for optimal parallelism. +- Unified handles and pin constraints as "attachments". +- Pin and distance constraints now correctly report forces in Newtons. +- Unitless "Stiffness" parameters have been replaced by "Compliance" parameters in most constraint types, expressed in Newtons/meter. + +### Added +- Support for multiple cursors in a single rope. + +### Removed +- World space/local space simulation. Simulation is now always performed in solver space. +- Solvers no longer have a maxParticles attribute. They dynamically change their capacity at runtime. + +### Fixed +- Crash in certain iOS devices using the A12 cpu. + +## [4.2] + +### Added +- Remade all sample scenes to work in Unity 2019.1 and above. + + +## [4.1] + +#IMPORTANT: You’ll need to re-create all your 3.x ObiRope components, as internal data layout of previous versions as well as serialized GameObject data from previous versions is not compatible with 4.x. + +### Added +- Now you can bake the rope mesh anytime, saving it as a new mesh asset in your project. Useful for set dressing and generating static geometry. Only works for ObiRopeExtrudedMeshRederer and ObiRopeMeshRenderer. +- More accurate collision/contact model, using staggered projections. +- Approximate shock propagation for particle contacts. This makes particle stacking easier and stabler. A new parameter has been added to the solver that controls the amount of shock propagation. +- Split material friction into static and dynamic friction. +- Added rolling contacts w/ rolling friction. These are slightly more expensive than regular contacts. Can be controlled on a per-collision material basis. +- Added ObiInstancedParticleRenderer, allows to draw particles as instances of an arbitrary mesh (requires GPU instancing). +- Particle-particle collision callbacks (solver.OnParticleCollision) + +### Fixed +- Bug that caused mesh colliders with negative thickness to crash. + +### Changed +- More reliable, higher precision algorithm for distance field generation. Specially noticeable in sharp corners/crevices. + +## [4.0.2] + +#IMPORTANT: You’ll need to re-create all your 3.x ObiRope components, as internal data layout of previous versions as well as serialized GameObject data from previous versions is not compatible with 4.x. + +### Changed +- Switched the Windows compiler to Clang/LLVM, resulting in a huge performance improvement. + +### Fixed +- Null ref exception when copying a ObiCloth component. +- Issue with pin constraints overshooting when solver set to world space mode. +- Issue that prevented pin constraints being torn. + +## [4.0] + +#IMPORTANT: You’ll need to re-create all your ObiRope components, as internal data layout of previous versions as well as serialized GameObject data from previous versions is not compatible with 4.x. + +### Added +- New ObiRod actor: advanced rope that models torsion, as well as anisotropic bending and shearing. +- Added 3 new constraint types: Shear/Stretch, Bend/Twist and Chain. +- Achieved zero garbage generation trough the use of new Unity API for camera frustum planes. + +### Changed +- All particle buffers (positions, velocities, etc). are now shared between C++/C# using pointers to aligned memory. This completely eliminates the need for copying data back and forth, simplifies the API + and improves performance. The entire Oni.Get/SetParticle* family of methods has disappeared, now you can work with the particle buffers directly. +- Rope rendering modes have been replaced by ObiRopeRenderer components. + +### Fixed +- Null ref exception when initializing a disabled actor. +- Bug that caused XPBD to be time step dependent. + +## [3.5] + +### Added +- Support for 32 and 64 bit Linux architectures. +- Two-way rigidbody interaction for local-space solvers. +- Added world inertia scale. +- ObiCollider now takes a reference to a Collider, enabling the use of multiple colliders in the same GameObject. + +### Changed +- Separated world velocity scale into linear and angular components. +- World velocity scale is no longer specified per-actor, but per-solver. +- Better ObiProfiler: it now shows a per-thread pyramid diagram of internal jobs, with more human-readable names. + +### Removed +- Solvers no longer have a Collision Layers property. All solvers share the same colliders. Note that you can still use phases to ignore collisions with certain colliders. +- Local space solvers no longer need their own copy of each ObiCollider in the scene, they can all share the same colliders. This results in much higher performance for multiple local-space solvers. + +### Fixed +- Added (float3x3) typecast to particle shaders, to be GLES friendly. + +## [3.4.1] + +### Added +- "Thickness from particles" now works in Custom Mesh render mode. +- Custom Mesh mode now has a "volume scaling" parameter that squashes and stretches the mesh together with the rope. + +## [3.4] + +### Added +- Perspective-correct particle rendering. +- ObiParticleRenderer now supports custom shaders for rendering. + +### Fixed +- Bug that required to disable and re-enable ObiParticleRenderer when moving the actor to a new solver. +- Bug that caused twitching when performing more than 1 physics step per frame when using handles. + +## [3.3.1] + +### Fixed +- Removed unused variable warnings introduced in 3.3 +- Fixed null ref exception when creating a new distance field asset. +- Fixed crash when using multiple solvers in different update modes. +- Fixed some sample scenes lacking collision due to missing distance field. + +## [3.3] + +### Added +- Support for 2D rigidbody coupling has been brought back. +- Added substepping to the core solver. This allows to update each solver at a different effective frequency, and decouple the Obi + physics loop from Unity’s. +- New implementation of fine-grained parallel tasks in core solver, that boosts performance up to x1.5. +- Support for a new type of rope rendering, that can deform any mesh to follow the rope curve. +- Support for a new collision primitive: distance fields. +- Support for per-particle coloring of rope. +- ObiCollider automatically creates ObiRigidbody component if needed when reparenting it. +- Helper script (ObiKinematicVelocities) that calculates angular and linear velocities for kinematic rigidbodies that are transformed around. Useful for continuous collision detection and friction effects against objects that are being moved around using their transform instead of forces. + +### Changed +- Near-zero garbage generation for OnCollision and ObFluidUpdated solver events. +- Near-zero garbage generation for rope rendering. +- Constraints.GetBatches() now returns an IEnumerable. This means it cannot be accesed by index. There’s a helper method GetFirstBatch() that returns +the correctly typed first batch, or null if there’s none. + +### Fixed +- Null reference exception in pin constraints when visualization is enabled. +- Bug that caused asleep particles to miss collisions upon reactivation. +- Bug that caused copying a rope to “steal“ the mesh from the original one. + +## [3.2] +### Added +- Support for CapsuleCollider2D. + +### Changed +- Rope is still rendered (though not simulated) when the ObiRope component is disabled. +- Colliders/rigidbodies are no longer copied over to the C++ library each frame. Instead, only colliders that have their transform or any collision-related property altered are copied to the solver. This greatly improves performance when many colliders are present, and greatly reduces memory allocation and GC activity. +- AllocateParticles() and FreeParticles() have been merged with AddActor() and RemoveActor() respectively. A new per-particle array “particleToActor” makes it faster and easier to know which actor a particle belongs to. + +### Removed +- ObiCollisionGroup has disappeared. It is no longer necessary to manually add colliders to a group, instead each ObiSolver automatically picks up all ObiColliders in a given layer. +- MeshColliders are now always treated as two-sided thin concave meshes. Solid and one-sided modes have disappeared. + +### Fixed +- Android issue that prevented some devices from finding the Oni library. +- Removed redundant menu items. + +## [3.1.1] +### Added +- New “Line” rendering mode for ropes. This will render the rope as a camera-oriented quad strip, similar to what Unity’s LineRenderer does. This is useful for lightweight rendering and 2D games. +- Particle renderer is now much faster and also allocates less memory. +- New “hierarchical” method to generate tether constraints: this method generates more constraints than the traditional “anchor to fixed” approach, but works in the general case even if there are no fixed particles. + +### Changed +- Installation is no longer required. Obi now works right out of the box, so the installation window has been removed, and the “Editor default resources” and “Gizmos” folders removed. + +## [3.1] +### Added +- You can now choose where should the solver be updated: FixedUpdate, AfterFixedUpdate, or LateUpdate. +- Rope rendering now supports variable thickness, based on particle radii. Enabled by default, disable “thickness from particles” to get uniform thickness regardless of particle radii variations. +- Edit-time preview of “smoothness” rope parameter. +- Utility method to calculate actual rope length. +- Support for triggers. A trigger collider will generate contact constraints, but won´t enforce them. +- Contact structs returned by the OnCollision event now include the contact tangent and bitangent vectors. +- Added per-particle layer properties, for finer collision control. + +### Changed +- Faster and more accurate rigidbody impulse application, which results in better collision resolution. +- Greatly improved pin constraint stability for large mass ratios. +- ObiColliderGroup’s Colliders and Colliders2D properties are now plain arrays: “colliders” and “colliders2D”. +- Memory allocation for rope mesh generation has been reduced by 90%. +- ObiParticleRenderer memory allocation has been greatly reduced, and its performance improved. +- Pin constraints are now always drawn in particle edit mode, not only when the particles are selected. + +### Fixed +- Got rid of warnings related to obsolete platform enums in sample scripts. +- Potential bug in GCHandle deallocation affecting upcoming Unity versions (thanks to the guys at Unity for pointing me at this) +- Tearable pin constraints now work correctly. + +## [3.0.1] +### Added +- Support for iOS simulator. +- Faster collision contact generation. + +### Fixed +- Crash in Crane scene due to a bug in pin constraints. + +## [3.0] + +#IMPORTANT: You’ll need to re-generate all your ropes as internal data layout of previous versions is not compatible with this update. +### Added +- Welcome window with automatic installer. +- Upgraded constraint projection to XPBD (extended position-based dynamics). This decouples stiffness and damping from the amount of iterations, resulting in more realistic simulation. +- Solver constraint enforcement order can now be changed. This allows to change the relative importance of constraints. +- The solver now uses a task-based threading system which allows to exploit parallelism between multiple solvers. +- Custom multithreading profiler, that allows to fine-tune performance. +- Optional local-space simulation, for better numerical accuracy in large-scale worlds and greater control. +- ObiStitcher component allows to stitch together separate ropes. +- Added pencil paint mode to particle editor. +- Automatic self-collisions disabling for particles that intersect in rest pose. This allows to set larger particle radii + to ensure better self-collisions, without worrying about constraint fighting. +- Breakable pin constraints. +- Ropes are now tearable, and custom prefabs can be instantiated at both sides of the tear. +- Rope length can be changed at runtime, using the ObiRopeCursor component. +- Procedural curve geometry smoothing. + +### Changed +- Actor particle limit is no longer 16384 but 65536, matching Unity’s own vertex limit. +- Particle editor paint brush falloff has ben changed from linear to gaussian. +- Distance constraints’ compression stiffness has been replaced by a slack percentage. +- Performance improvement in mesh colliders and edge colliders. + +### Fixed +- Bug in collision detection against terrains. +- Crash in 32-bit windows systems due to memory misalignment. +- Bug that caused slow convergence and excessive jittering for particle-particle sequential contact resolution. +- Bug in hierarchical grid update that caused a crash in some cases when a hash key collision happened. +- Bug in continuous collision detection that caused particles to be pushed to the other side of very thin objects. +- Bug in ray/bounding box intersection test caused by non-IEEE754 compliant SSE division by zero. +- Bug that caused ObiParticleRenderer to ignore camera culling mask, and render in all cameras. +- Bug that caused a crash under certain conditions in 32 bit systems. +- Bug that caused particle property value field to reset to the value of the last particle when painting. +- Fixed collision stabilization bug that caused particles to sink slightly when over a dynamic rigidbody. + +## [1.2] + +### Added +- Android support. +- Upgraded constraint projection to XPBD (extended position-based dynamics). This decouples stiffness and damping from the amount of iterations. +- Solver constraint enforcement order can now be changed. This allows to change the relative importance of constraints. +- Welcome window with automatic installer. +- Resolution-preserving method to change rope length dynamically. +- Added pencil paint mode to particle editor. +- Optional local-space simulation, for better numerical accuracy in large-scale worlds and greater control. +- Custom multithreading profiler, that allows to fine-tune performance. +- Better particle visualization in editor. +- Breakable pin constraints. + +### Changed +- Actor particle limit is no longer 16384 but 65536, matching Unity’s own vertex limit. +- Particle editor paint brush falloff has ben changed from linear to gaussian. +- Distance constraints’ compression stiffness has been replaced by a slack percentage. + +### Fixed +- Bug that caused an index out of bounds exception when initializing rope with zero resolution. +- Bug that caused an error message regarding MeshFilter destruction when entering play mode with a rope selected in the hierarchy. +- Bug that prevented the particle editor window from appearing on retina displays. +- 1-frame delay between particle and rigid body physics, which affected pin and collision constraints. + +## [1.1] + +### Added +- MeshColliders are now fully supported. +- Support for 2D physics, Box2D, Circle2D and Edge2D colliders. +- Chain rendering. +- Sleep threshold that keeps particles fixed in place when their kinetic energy is low. +- Chain constraints, that allow for 100% inextensible ropes. +- Rope thickness, twist, cap sections and section shape can now be changed without the need to re-initialize the rope. +- Required constraint components are automatically removed from the object when removing the rope component in editor. + +### Fixed +- Issue with box colliders, that caused incorrect contact generation in corners when using contactOffset. + +## [1.0.0] - 2015-07-16 +- Initial release. diff --git a/xiaofang/Assets/Obi/CHANGELOG_rope.txt.meta b/xiaofang/Assets/Obi/CHANGELOG_rope.txt.meta new file mode 100644 index 00000000..7cc321af --- /dev/null +++ b/xiaofang/Assets/Obi/CHANGELOG_rope.txt.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8d9d04260bc994f1b9d444b675212dc6 +labels: +- ObiRope +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor.meta b/xiaofang/Assets/Obi/Editor.meta new file mode 100644 index 00000000..ec618e6c --- /dev/null +++ b/xiaofang/Assets/Obi/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d6a0c47fa0afb4e1fb441061faa32d50 +folderAsset: yes +timeCreated: 1435569421 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common.meta b/xiaofang/Assets/Obi/Editor/Common.meta new file mode 100644 index 00000000..5684f1cf --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3d5722720e25b4db69e767c6920cf081 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints.meta new file mode 100644 index 00000000..5576b955 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1af54f7feeec0410cada2fc051752b61 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools.meta new file mode 100644 index 00000000..6737bc72 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aa63386a67f904b399175c9931270250 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiBlueprintEditorTool.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiBlueprintEditorTool.cs new file mode 100644 index 00000000..54dcca92 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiBlueprintEditorTool.cs @@ -0,0 +1,40 @@ +using UnityEngine; +using UnityEditor; + +namespace Obi +{ + public abstract class ObiBlueprintEditorTool + { + protected ObiActorBlueprintEditor editor; + protected string m_Name; + protected Texture m_Icon; + + public string name + { + get { return m_Name; } + } + + public Texture icon + { + get + { + return m_Icon; + } + } + + public ObiBlueprintEditorTool(ObiActorBlueprintEditor editor) + { + this.editor = editor; + } + + public virtual void OnEnable(){} + public virtual void OnDisable(){} + public virtual void OnDestroy(){} + public virtual string GetHelpString() { return string.Empty; } + + public abstract void OnInspectorGUI(); + public virtual void OnSceneGUI(SceneView sceneView){} + + public virtual bool Editable(int index) { return editor.visible[index]; } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiBlueprintEditorTool.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiBlueprintEditorTool.cs.meta new file mode 100644 index 00000000..95c9d3dd --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiBlueprintEditorTool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ca0c1c4cbbd024d49b15bf3439506500 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPaintBrushEditorTool.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPaintBrushEditorTool.cs new file mode 100644 index 00000000..c2c9e123 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPaintBrushEditorTool.cs @@ -0,0 +1,130 @@ +using UnityEngine; +using UnityEditor; + +namespace Obi +{ + public class ObiPaintBrushEditorTool : ObiBlueprintEditorTool + { + public ObiRaycastBrush paintBrush; + public bool selectionMask = false; + public int sourcePropertyIndex = 0; /**("BrushIcon"); + m_Name = "Property painting"; + + paintBrush = new ObiRaycastBrush(editor.sourceMesh, + () => + { + // As RecordObject diffs with the end of the current frame, + // and this is a multi-frame operation, we need to use RegisterCompleteObjectUndo instead. + Undo.RegisterCompleteObjectUndo(editor.blueprint, "Paint particles"); + }, + () => + { + editor.Refresh(); + }, + () => + { + EditorUtility.SetDirty(editor.blueprint); + }); + + } + + public override string GetHelpString() + { + return "Paint particle properties directly on the mesh. Most brushes have an alternate mode, accesed by holding 'shift' while painting."; + } + + public override void OnInspectorGUI() + { + EditorGUILayout.BeginVertical(EditorStyles.inspectorDefaultMargins); + EditorGUILayout.Space(); + + // toolbar with available brush modes for the current property: + editor.currentProperty.BrushModes(paintBrush); + + EditorGUILayout.Space(); + + EditorGUI.BeginChangeCheck(); + editor.currentPropertyIndex = editor.PropertySelector(editor.currentPropertyIndex); + if (EditorGUI.EndChangeCheck()) + { + editor.Refresh(); + editor.currentProperty.OnSelect(paintBrush); + } + + if (paintBrush.brushMode is ObiFloatCopyBrushMode) + { + EditorGUI.BeginChangeCheck(); + sourcePropertyIndex = editor.PropertySelector(sourcePropertyIndex, "Copy from"); + var sourceProperty = editor.GetProperty(sourcePropertyIndex) as ObiBlueprintFloatProperty; + if (EditorGUI.EndChangeCheck()) + { + (paintBrush.brushMode as ObiFloatCopyBrushMode).source = sourceProperty; + } + if (sourceProperty == null) + EditorGUILayout.HelpBox("You can't copy value from this property.", MessageType.Error); + } + + if (paintBrush.brushMode.needsInputValue) + editor.currentProperty.PropertyField(); + + paintBrush.radius = EditorGUILayout.Slider("Brush size", paintBrush.radius, 0.0001f, 0.5f); + paintBrush.innerRadius = EditorGUILayout.Slider("Brush inner size", paintBrush.innerRadius, 0, 1); + paintBrush.opacity = EditorGUILayout.Slider("Brush opacity", paintBrush.opacity, 0, 1); + paintBrush.mirror.axis = (ObiBrushMirrorSettings.MirrorAxis)EditorGUILayout.EnumPopup("Brush mirror axis", paintBrush.mirror.axis); + paintBrush.mirror.space = (ObiBrushMirrorSettings.MirrorSpace)EditorGUILayout.EnumPopup("Brush mirror space", paintBrush.mirror.space); + + EditorGUI.BeginChangeCheck(); + meshBasedEditor.particleCulling = (ObiMeshBasedActorBlueprintEditor.ParticleCulling)EditorGUILayout.EnumPopup("Culling", meshBasedEditor.particleCulling); + if (ObiActorBlueprintEditor.selectedCount == 0) + { + EditorGUILayout.HelpBox("Select at least one particle to use selection mask.", MessageType.Info); + selectionMask = false; + GUI.enabled = false; + } + selectionMask = EditorGUILayout.Toggle("Selection mask", selectionMask); + if (EditorGUI.EndChangeCheck()) + SceneView.RepaintAll(); + GUI.enabled = true; + + EditorGUILayout.EndVertical(); + + EditorGUILayout.Space(); + GUILayout.Box(GUIContent.none, ObiEditorUtils.GetSeparatorLineStyle()); + + EditorGUILayout.BeginVertical(EditorStyles.inspectorDefaultMargins); + + editor.RenderModeSelector(); + editor.currentProperty.VisualizationOptions(); + + EditorGUILayout.EndVertical(); + } + + public override bool Editable(int 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/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPaintBrushEditorTool.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPaintBrushEditorTool.cs.meta new file mode 100644 index 00000000..b0abbdf5 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPaintBrushEditorTool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 332bb5fc94a774291b4c4ebe50f61205 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiParticleSelectionEditorTool.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiParticleSelectionEditorTool.cs new file mode 100644 index 00000000..6a21eb66 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiParticleSelectionEditorTool.cs @@ -0,0 +1,336 @@ +using UnityEngine; +using UnityEditor; +using UnityEditorInternal; + +namespace Obi +{ + public class ObiParticleSelectionEditorTool : ObiBlueprintEditorTool + { + ObiScreenSpaceBrush selectionBrush; + ObiSelectBrushMode selectMode; + ObiTethersTool tethersTool; + + protected ReorderableList particleGroupList; + protected bool mixedPropertyValue = false; + protected float minSelectionValue; + protected float maxSelectionValue; + + public ObiParticleSelectionEditorTool(ObiActorBlueprintEditor editor) : base(editor) + { + m_Icon = Resources.Load("SelectIcon"); + m_Name = "Particle selection"; + + selectionBrush = new ObiScreenSpaceBrush(null, UpdateSelection, null); + selectMode = new ObiSelectBrushMode(new ObiBlueprintSelected(editor)); + + selectionBrush.brushMode = selectMode; + tethersTool = new ObiTethersTool(); + + InitializeGroupsList(); + } + + + public override string GetHelpString() + { + if (ObiActorBlueprintEditor.selectedCount > 0) + return "" + ObiActorBlueprintEditor.selectedCount + " selected particles."; + else + return "No particles selected. Click and drag over particles to select them."; + } + + private void InitializeGroupsList() + { + particleGroupList = new ReorderableList(editor.serializedObject, + editor.serializedObject.FindProperty("groups"), + false, true, true, true); + + particleGroupList.drawHeaderCallback = (Rect rect) => + { + EditorGUI.LabelField(rect, "Groups"); + }; + + particleGroupList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => + { + var element = particleGroupList.serializedProperty.GetArrayElementAtIndex(index); + rect.y += 4; + + SerializedObject obj = new SerializedObject(element.objectReferenceValue); + ObiParticleGroup group = obj.targetObject as ObiParticleGroup; + + EditorGUI.PropertyField(new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight), + obj.FindProperty("m_Name"), new GUIContent("Name")); + rect.y += EditorGUIUtility.singleLineHeight + 2; + + if (GUI.Button(new Rect(rect.x, rect.y, rect.width * 0.5f, EditorGUIUtility.singleLineHeight), "Select", EditorStyles.miniButtonLeft)) + { + if ((Event.current.modifiers & EventModifiers.Shift) == 0) + { + for (int p = 0; p < ObiActorBlueprintEditor.selectionStatus.Length; p++) + ObiActorBlueprintEditor.selectionStatus[p] = false; + } + + foreach (int p in group.particleIndices) + ObiActorBlueprintEditor.selectionStatus[p] = true; + + UpdateSelection(); + } + + 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 < ObiActorBlueprintEditor.selectionStatus.Length; p++) + { + if (ObiActorBlueprintEditor.selectionStatus[p]) + group.particleIndices.Add(p); + } + } + + obj.ApplyModifiedProperties(); + }; + + particleGroupList.elementHeight = (EditorGUIUtility.singleLineHeight + 2) * 2 + 8; + + particleGroupList.onAddCallback = (ReorderableList list) => + { + + var group = editor.blueprint.AppendNewParticleGroup("new group"); + + for (int i = 0; i < ObiActorBlueprintEditor.selectionStatus.Length; i++) + { + if (ObiActorBlueprintEditor.selectionStatus[i]) + group.particleIndices.Add(i); + } + + AssetDatabase.SaveAssets(); + }; + + particleGroupList.onRemoveCallback = (ReorderableList list) => + { + editor.blueprint.RemoveParticleGroupAt(list.index); + }; + } + + private void SelectionTools() + { + EditorGUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + if (GUILayout.Button(new GUIContent(Resources.Load("InvertButton"), "Invert selection"), GUILayout.MaxHeight(24), GUILayout.MaxWidth(48))) + { + for (int i = 0; i < ObiActorBlueprintEditor.selectionStatus.Length; i++) + { + if (editor.blueprint.IsParticleActive(i)) + ObiActorBlueprintEditor.selectionStatus[i] = !ObiActorBlueprintEditor.selectionStatus[i]; + } + UpdateSelection(); + } + + 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 < 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 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 ObiActorBlueprintEditor.selectionStatus, false); + editor.Refresh(); + } + GUI.enabled = true; + + if (GUILayout.Button(new GUIContent(Resources.Load("RestoreButton"), "Restore removed particles"), GUILayout.MaxHeight(24), GUILayout.MaxWidth(48))) + { + Undo.RecordObject(editor.blueprint, "Restore removed particles"); + editor.blueprint.RestoreRemovedParticles(); + editor.Refresh(); + } + + GUILayout.FlexibleSpace(); + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Property-based selection", EditorStyles.boldLabel); + var property = editor.currentProperty as ObiBlueprintFloatProperty; + if (property != null) + { + if (!Mathf.Approximately(property.minVisualizationValue,property.maxVisualizationValue)) + { + EditorGUILayout.HelpBox("Drag the slider to select based on " + property.name + ". You can choose a different property in the \"Property\" dropdown below.", MessageType.None); + minSelectionValue = Mathf.Max(minSelectionValue, property.minVisualizationValue); + maxSelectionValue = Mathf.Min(maxSelectionValue, property.maxVisualizationValue); + maxSelectionValue = Mathf.Max(maxSelectionValue, minSelectionValue); + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.MinMaxSlider("Select by " + property.name, ref minSelectionValue, ref maxSelectionValue, property.minVisualizationValue, property.maxVisualizationValue); + minSelectionValue = EditorGUILayout.FloatField("Minimum " + property.name, minSelectionValue); + maxSelectionValue = EditorGUILayout.FloatField("Maximum " + property.name, maxSelectionValue); + if (EditorGUI.EndChangeCheck()) + { + for (int i = 0; i < ObiActorBlueprintEditor.selectionStatus.Length; i++) + { + if (editor.blueprint.IsParticleActive(i)) + { + var value = property.Get(i); + ObiActorBlueprintEditor.selectionStatus[i] = value >= minSelectionValue && value <= maxSelectionValue; + } + } + UpdateSelection(); + } + } + else + { + EditorGUILayout.HelpBox("All particles have the same " + property.name + " value.", MessageType.Info); + } + } + else + { + EditorGUILayout.HelpBox("Property-based selection only works with scalar properties.",MessageType.Info); + } + } + + public override void OnInspectorGUI() + { + // Selection tools: + EditorGUILayout.BeginVertical(EditorStyles.inspectorDefaultMargins); + EditorGUILayout.Space(); + + selectionBrush.radius = EditorGUILayout.Slider("Brush size", selectionBrush.radius, 5, 200); + + if (editor is ObiMeshBasedActorBlueprintEditor) + { + EditorGUI.BeginChangeCheck(); + (editor as ObiMeshBasedActorBlueprintEditor).particleCulling = (ObiMeshBasedActorBlueprintEditor.ParticleCulling)EditorGUILayout.EnumPopup("Culling", (editor as ObiMeshBasedActorBlueprintEditor).particleCulling); + if (EditorGUI.EndChangeCheck()) + SceneView.RepaintAll(); + } + + + EditorGUILayout.Space(); + SelectionTools(); + + EditorGUILayout.EndVertical(); + + + // Properties: + EditorGUILayout.Space(); + GUILayout.Box(GUIContent.none, ObiEditorUtils.GetSeparatorLineStyle()); + + EditorGUILayout.BeginVertical(EditorStyles.inspectorDefaultMargins); + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Properties", EditorStyles.boldLabel); + EditorGUILayout.HelpBox("Select a property to view and edit. Currently editing " + editor.currentProperty.name+".", MessageType.None); + + EditorGUI.BeginChangeCheck(); + editor.currentPropertyIndex = editor.PropertySelector(editor.currentPropertyIndex); + if (EditorGUI.EndChangeCheck()) + { + editor.Refresh(); + UpdateSelection(); + } + + // Property value: + EditorGUI.showMixedValue = mixedPropertyValue; + EditorGUI.BeginChangeCheck(); + editor.currentProperty.PropertyField(); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(editor.blueprint, "Set particle property"); + for (int i = 0; i < ObiActorBlueprintEditor.selectionStatus.Length; i++) + { + if (!ObiActorBlueprintEditor.selectionStatus[i]) continue; + editor.currentProperty.SetDefaultToIndex(i); + } + editor.Refresh(); + } + + EditorGUI.showMixedValue = false; + + EditorGUILayout.EndVertical(); + + + // Particle groups: + EditorGUILayout.Space(); + GUILayout.Box(GUIContent.none, ObiEditorUtils.GetSeparatorLineStyle()); + + EditorGUILayout.BeginVertical(EditorStyles.inspectorDefaultMargins); + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Particle groups", EditorStyles.boldLabel); + particleGroupList.DoLayoutList(); + + EditorGUILayout.EndVertical(); + + + + if (editor.blueprint.usesTethers) + { + EditorGUILayout.Space(); + GUILayout.Box(GUIContent.none, ObiEditorUtils.GetSeparatorLineStyle()); + EditorGUILayout.BeginVertical(EditorStyles.inspectorDefaultMargins); + EditorGUILayout.Space(); + tethersTool.DoTethers(editor); + EditorGUILayout.EndVertical(); + } + + EditorGUILayout.Space(); + GUILayout.Box(GUIContent.none, ObiEditorUtils.GetSeparatorLineStyle()); + + EditorGUILayout.BeginVertical(EditorStyles.inspectorDefaultMargins); + + editor.RenderModeSelector(); + ObiActorBlueprintEditor.dotRadiusScale = EditorGUILayout.Slider(new GUIContent("Particle dot size"), ObiActorBlueprintEditor.dotRadiusScale, 0, 5); + editor.currentProperty.VisualizationOptions(); + + EditorGUILayout.EndVertical(); + } + + public override void OnSceneGUI(SceneView sceneView) + { + if (Camera.current != null) + selectionBrush.DoBrush(editor.blueprint.positions); + } + + protected void UpdateSelection() + { + 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 < ObiActorBlueprintEditor.selectionStatus.Length; i++) + { + if (editor.blueprint.IsParticleActive(i) && ObiActorBlueprintEditor.selectionStatus[i]) + { + ObiActorBlueprintEditor.selectedCount++; + + if (ObiActorBlueprintEditor.activeParticle >= 0) + { + if (!editor.currentProperty.Equals(ObiActorBlueprintEditor.activeParticle, i)) + mixedPropertyValue = true; + } + else + ObiActorBlueprintEditor.activeParticle = i; + } + else if (ObiActorBlueprintEditor.activeParticle == i) + ObiActorBlueprintEditor.activeParticle = -1; + } + + // Set initial property value: + if (!mixedPropertyValue && ObiActorBlueprintEditor.activeParticle >= 0) + editor.currentProperty.GetDefaultFromIndex(ObiActorBlueprintEditor.activeParticle); + + editor.Repaint(); + SceneView.RepaintAll(); + + } + + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiParticleSelectionEditorTool.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiParticleSelectionEditorTool.cs.meta new file mode 100644 index 00000000..774ebafc --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiParticleSelectionEditorTool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b3940c62f9ffe4808afc4d2d70ae5e28 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPropertyTextureEditorTool.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPropertyTextureEditorTool.cs new file mode 100644 index 00000000..8ceee4b0 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPropertyTextureEditorTool.cs @@ -0,0 +1,166 @@ +using UnityEngine; +using UnityEditor; +using UnityEditorInternal; +using System.Collections; +using System; + +namespace Obi +{ + public class ObiPropertyTextureEditorTool : ObiBlueprintEditorTool + { + public enum TextureChannel + { + Red = 0, + Green = 1, + Blue = 2, + Alpha = 3, + } + + protected bool selectionMask = false; + protected bool import = true; + protected bool export = true; + + protected float minPropertyValue = 0; + protected float maxPropertyValue = 10; + + protected int exportWidth = 512; + protected int exportHeight = 512; + protected int padding = 64; + + protected Texture2D propertyTexture; + protected TextureChannel textureChannel; + + protected ObiBlueprintFloatProperty floatProperty; + protected ObiBlueprintColorProperty colorProperty; + protected Action textureReadCallback; + + public ObiMeshBasedActorBlueprintEditor meshBasedEditor + { + get { return editor as ObiMeshBasedActorBlueprintEditor; } + } + + public ObiPropertyTextureEditorTool(ObiMeshBasedActorBlueprintEditor editor) : base(editor) + { + m_Icon = Resources.Load("TextureIcon"); + m_Name = "Texture import/export"; + } + + public override string GetHelpString() + { + return "Import/export particle properties to textures. Assumes that your mesh has non-overlapping UVs."; + } + + private void FloatFromTexture(int i, Color color) + { + if (!selectionMask || ObiActorBlueprintEditor.selectionStatus[i]) + { + float value = minPropertyValue + color[(int)textureChannel] * (maxPropertyValue - minPropertyValue); + floatProperty.Set(i, value); + } + } + + private void ColorFromTexture(int i, Color color) + { + if (!selectionMask || ObiActorBlueprintEditor.selectionStatus[i]) + colorProperty.Set(i, color); + } + + public override void OnInspectorGUI() + { + EditorGUILayout.BeginVertical(EditorStyles.inspectorDefaultMargins); + EditorGUILayout.Space(); + + EditorGUI.BeginChangeCheck(); + editor.currentPropertyIndex = editor.PropertySelector(editor.currentPropertyIndex); + if (EditorGUI.EndChangeCheck()) + editor.Refresh(); + + EditorGUILayout.EndVertical(); + + EditorGUILayout.Space(); + GUILayout.Box(GUIContent.none, ObiEditorUtils.GetSeparatorLineStyle()); + + EditorGUILayout.BeginVertical(EditorStyles.inspectorDefaultMargins); + import = EditorGUILayout.BeginFoldoutHeaderGroup(import, "Import texture"); + + if (import) + { + propertyTexture = (Texture2D)EditorGUILayout.ObjectField("Source", propertyTexture, typeof(Texture2D), false); + + floatProperty = editor.currentProperty as ObiBlueprintFloatProperty; + colorProperty = editor.currentProperty as ObiBlueprintColorProperty; + + if (floatProperty != null) + { + textureReadCallback = FloatFromTexture; + textureChannel = (TextureChannel)EditorGUILayout.EnumPopup("Source channel", textureChannel); + minPropertyValue = EditorGUILayout.FloatField("Min value", minPropertyValue); + maxPropertyValue = EditorGUILayout.FloatField("Max value", maxPropertyValue); + } + else if (colorProperty != null) + { + textureReadCallback = ColorFromTexture; + } + + if (GUILayout.Button("Import")) + { + Undo.RecordObject(editor.blueprint, "Import particle property"); + if (!meshBasedEditor.ReadParticlePropertyFromTexture(propertyTexture, textureReadCallback)) + { + EditorUtility.DisplayDialog("Invalid texture", "The texture is either null or not readable.", "Ok"); + } + + // force automatic range calculation for floating point properties. + if (floatProperty != null) + floatProperty.autoRange = true; + editor.Refresh(); + } + } + EditorGUILayout.EndFoldoutHeaderGroup(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.Space(); + GUILayout.Box(GUIContent.none, ObiEditorUtils.GetSeparatorLineStyle()); + + EditorGUILayout.BeginVertical(EditorStyles.inspectorDefaultMargins); + export = EditorGUILayout.BeginFoldoutHeaderGroup(export, "Export texture"); + + if (export) + { + exportWidth = EditorGUILayout.IntField("Texture width", exportWidth); + exportHeight = EditorGUILayout.IntField("Texture height", exportHeight); + padding = EditorGUILayout.IntField("Padding", padding); + if (GUILayout.Button("Export")) + { + var path = EditorUtility.SaveFilePanel("Save texture as PNG", + "", + "property.png", + "png"); + if (path.Length > 0) + { + // force automatic range calculation for floating point properties. + if (floatProperty != null) + floatProperty.autoRange = true; + editor.Refresh(); + + if (!meshBasedEditor.WriteParticlePropertyToTexture(path, exportWidth, exportHeight, padding)) + { + EditorUtility.DisplayDialog("Invalid path", "Could not write a texture to that location.", "Ok"); + } + } + } + } + + EditorGUILayout.EndFoldoutHeaderGroup(); + EditorGUILayout.EndVertical(); + + EditorGUILayout.Space(); + GUILayout.Box(GUIContent.none, ObiEditorUtils.GetSeparatorLineStyle()); + + EditorGUILayout.BeginVertical(EditorStyles.inspectorDefaultMargins); + editor.RenderModeSelector(); + EditorGUILayout.EndVertical(); + } + + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPropertyTextureEditorTool.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPropertyTextureEditorTool.cs.meta new file mode 100644 index 00000000..0655a767 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPropertyTextureEditorTool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7727285b07aa44d6e8f65a8bc1f5d972 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiTethersTool.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiTethersTool.cs new file mode 100644 index 00000000..a1e4d29f --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiTethersTool.cs @@ -0,0 +1,86 @@ +using UnityEngine; +using UnityEditor; +using System; + + +namespace Obi +{ + public class ObiTethersTool + { + protected Rect tetherDropdownRect; + protected bool[] tetheredGroups = new bool[0]; + + // the GenericMenu.MenuFunction2 event handler for when a menu item is selected + void OnTetherGroupSelected(object index) + { + int i = (int)index; + tetheredGroups[i] = !tetheredGroups[i]; + } + + public void DoTethers(ObiActorBlueprintEditor editor) + { + EditorGUILayout.LabelField("Tethers", EditorStyles.boldLabel); + + var tethers = editor.blueprint.GetConstraintsByType(Oni.ConstraintType.Tether); + int tetherCount = 0; + if (tethers != null) + tetherCount = tethers.GetConstraintCount(); + + if (tetherCount > 0) + EditorGUILayout.LabelField("" + tetherCount + " tether constraints.", EditorStyles.helpBox); + else + EditorGUILayout.LabelField("No tether constraints. Select at least one particle group in the dropdown, then click 'Generate Tethers'.", EditorStyles.helpBox); + + Array.Resize(ref tetheredGroups, editor.blueprint.groups.Count); + + // display the GenericMenu when pressing a button + if (GUILayout.Button("Tethered groups", EditorStyles.popup)) + { + // create the menu and add items to it + GenericMenu menu = new GenericMenu(); + + // forward slashes nest menu items under submenus + for (int i = 0; i < editor.blueprint.groups.Count; ++i) + { + menu.AddItem(new GUIContent(editor.blueprint.groups[i].name), tetheredGroups[i], OnTetherGroupSelected, i); + } + + // display the menu + menu.DropDown(tetherDropdownRect); + } + + if (Event.current.type == EventType.Repaint) + tetherDropdownRect = GUILayoutUtility.GetLastRect(); + + + EditorGUILayout.BeginHorizontal(); + if (GUILayout.Button("Generate tethers",GUILayout.MinHeight(32))) + { + // Select all particles in the tethered groups: + for (int i = 0; i < ObiActorBlueprintEditor.selectionStatus.Length; ++i) + { + ObiActorBlueprintEditor.selectionStatus[i] = false; + for (int j = 0; j < tetheredGroups.Length; ++j) + { + if (tetheredGroups[j] && editor.blueprint.groups[j].ContainsParticle(i)) + { + ObiActorBlueprintEditor.selectionStatus[i] = true; + break; + } + } + } + + editor.blueprint.GenerateTethers(ObiActorBlueprintEditor.selectionStatus); + editor.Refresh(); + } + + if (GUILayout.Button("Clear tethers",GUILayout.MinHeight(32))) + { + editor.blueprint.ClearTethers(); + editor.Refresh(); + } + EditorGUILayout.EndHorizontal(); + + } + } +} diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiTethersTool.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiTethersTool.cs.meta new file mode 100644 index 00000000..fd2ba16f --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiTethersTool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6aefc9e7e74be461e93ee58f15c5a1dd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes.meta new file mode 100644 index 00000000..23624c35 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 625a6e0c1ba72483190830373b7b45fe +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes.meta new file mode 100644 index 00000000..9bdbd1de --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4fc4d44dc6d334c2985875fc6f7b8cb1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/IObiBrushMode.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/IObiBrushMode.cs new file mode 100644 index 00000000..4257fe69 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/IObiBrushMode.cs @@ -0,0 +1,9 @@ +namespace Obi +{ + public interface IObiBrushMode + { + string name{get;} + bool needsInputValue{ get; } + void ApplyStamps(ObiBrushBase brush, bool modified); + } +} diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/IObiBrushMode.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/IObiBrushMode.cs.meta new file mode 100644 index 00000000..ab2580d1 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/IObiBrushMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4c46364da0f1641c7ab84e12348a6a4b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorPaintBrushMode.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorPaintBrushMode.cs new file mode 100644 index 00000000..e094e7c1 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorPaintBrushMode.cs @@ -0,0 +1,38 @@ +using UnityEngine; + +namespace Obi +{ + public class ObiColorPaintBrushMode : IObiBrushMode + { + ObiBlueprintColorProperty property; + + public ObiColorPaintBrushMode(ObiBlueprintColorProperty property) + { + this.property = property; + } + + public string name + { + get { return "Paint"; } + } + + public bool needsInputValue + { + get { return true; } + } + + public void ApplyStamps(ObiBrushBase brush, bool modified) + { + for (int i = 0; i < brush.weights.Length; ++i) + { + if (!property.Masked(i) && brush.weights[i] > 0) + { + Color currentValue = property.Get(i); + Color delta = brush.weights[i] * brush.opacity * brush.speed * (property.GetDefault() - currentValue); + + property.Set(i, currentValue + delta * (modified ? -1 : 1)); + } + } + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorPaintBrushMode.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorPaintBrushMode.cs.meta new file mode 100644 index 00000000..d9fe6014 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorPaintBrushMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1fd033c8f79b1494d8b8de5c8311f8c1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorSmoothBrushMode.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorSmoothBrushMode.cs new file mode 100644 index 00000000..a5fd9c63 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorSmoothBrushMode.cs @@ -0,0 +1,53 @@ +using UnityEngine; + +namespace Obi +{ + public class ObiColorSmoothBrushMode : IObiBrushMode + { + ObiBlueprintColorProperty property; + + public ObiColorSmoothBrushMode(ObiBlueprintColorProperty property) + { + this.property = property; + } + + public string name + { + get { return "Smooth"; } + } + + public bool needsInputValue + { + get { return false; } + } + + public void ApplyStamps(ObiBrushBase brush, bool modified) + { + Color averageValue = Color.black; + float totalWeight = 0; + + for (int i = 0; i < brush.weights.Length; ++i) + { + if (!property.Masked(i) && brush.weights[i] > 0) + { + averageValue += property.Get(i) * brush.weights[i]; + totalWeight += brush.weights[i]; + } + + } + averageValue /= totalWeight; + + for (int i = 0; i < brush.weights.Length; ++i) + { + if (!property.Masked(i) && brush.weights[i] > 0) + { + Color currentValue = property.Get(i); + Color delta = brush.opacity * brush.speed * (Color.Lerp(currentValue, averageValue, brush.weights[i]) - currentValue); + + property.Set(i, currentValue + delta * (modified ? -1 : 1)); + } + } + + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorSmoothBrushMode.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorSmoothBrushMode.cs.meta new file mode 100644 index 00000000..8a0a75a7 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorSmoothBrushMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a69a8a1614478445cbb770a5e123ab18 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatAddBrushMode.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatAddBrushMode.cs new file mode 100644 index 00000000..8c2a5aa8 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatAddBrushMode.cs @@ -0,0 +1,36 @@ +namespace Obi +{ + public class ObiFloatAddBrushMode : IObiBrushMode + { + ObiBlueprintFloatProperty property; + + public ObiFloatAddBrushMode(ObiBlueprintFloatProperty property) + { + this.property = property; + } + + public string name + { + get { return "Add"; } + } + + public bool needsInputValue + { + get { return true; } + } + + public void ApplyStamps(ObiBrushBase brush, bool modified) + { + for (int i = 0; i < brush.weights.Length; ++i) + { + if (!property.Masked(i) && brush.weights[i] > 0) + { + float currentValue = property.Get(i); + float delta = brush.weights[i] * brush.opacity * brush.speed * property.GetDefault(); + + property.Set(i, currentValue + delta * (modified ? -1 : 1)); + } + } + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatAddBrushMode.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatAddBrushMode.cs.meta new file mode 100644 index 00000000..66272b90 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatAddBrushMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8b39e10cedc94461083b3b19c3ddb343 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatCopyBrushMode.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatCopyBrushMode.cs new file mode 100644 index 00000000..ae0b60fe --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatCopyBrushMode.cs @@ -0,0 +1,42 @@ +namespace Obi +{ + public class ObiFloatCopyBrushMode : IObiBrushMode + { + ObiBlueprintFloatProperty property; + public ObiBlueprintFloatProperty source; + + public ObiFloatCopyBrushMode(ObiBlueprintFloatProperty property, ObiBlueprintFloatProperty source) + { + this.property = property; + this.source = source; + } + + public string name + { + get { return "Copy"; } + } + + public bool needsInputValue + { + get { return false; } + } + + public void ApplyStamps(ObiBrushBase brush, bool modified) + { + if (property != null && source != null) + { + for (int i = 0; i < brush.weights.Length; ++i) + { + if (!property.Masked(i) && brush.weights[i] > 0) + { + float currentValue = property.Get(i); + float sourceValue = source.Get(i); + float delta = brush.weights[i] * brush.opacity * brush.speed * (sourceValue - currentValue); + + property.Set(i, currentValue + delta * (modified ? -1 : 1)); + } + } + } + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatCopyBrushMode.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatCopyBrushMode.cs.meta new file mode 100644 index 00000000..a51236b7 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatCopyBrushMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 95bb470841f42415ab256cd64adb9242 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatPaintBrushMode.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatPaintBrushMode.cs new file mode 100644 index 00000000..369a0d1e --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatPaintBrushMode.cs @@ -0,0 +1,37 @@ + +namespace Obi +{ + public class ObiFloatPaintBrushMode : IObiBrushMode + { + ObiBlueprintFloatProperty property; + + public ObiFloatPaintBrushMode(ObiBlueprintFloatProperty property) + { + this.property = property; + } + + public string name + { + get { return "Paint"; } + } + + public bool needsInputValue + { + get { return true; } + } + + public void ApplyStamps(ObiBrushBase brush, bool modified) + { + for (int i = 0; i < brush.weights.Length; ++i) + { + if (!property.Masked(i) && brush.weights[i] > 0) + { + float currentValue = property.Get(i); + float delta = brush.weights[i] * brush.opacity * brush.speed * (property.GetDefault() - currentValue); + + property.Set(i, currentValue + delta * (modified ? -1 : 1)); + } + } + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatPaintBrushMode.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatPaintBrushMode.cs.meta new file mode 100644 index 00000000..94c33004 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatPaintBrushMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eb3d176006d404a508bef284d2701ab0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatSmoothBrushMode.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatSmoothBrushMode.cs new file mode 100644 index 00000000..35cfcdbc --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatSmoothBrushMode.cs @@ -0,0 +1,55 @@ +using UnityEngine; + +namespace Obi +{ + public class ObiFloatSmoothBrushMode : IObiBrushMode + { + ObiBlueprintFloatProperty property; + + public ObiFloatSmoothBrushMode(ObiBlueprintFloatProperty property) + { + this.property = property; + } + + public string name + { + get { return "Smooth"; } + } + + public bool needsInputValue + { + get { return false; } + } + + public void ApplyStamps(ObiBrushBase brush, bool modified) + { + var floatProperty = (ObiBlueprintFloatProperty)property; + + float averageValue = 0; + float totalWeight = 0; + + for (int i = 0; i < brush.weights.Length; ++i) + { + if (!property.Masked(i) && brush.weights[i] > 0) + { + averageValue += floatProperty.Get(i) * brush.weights[i]; + totalWeight += brush.weights[i]; + } + + } + averageValue /= totalWeight; + + for (int i = 0; i < brush.weights.Length; ++i) + { + if (!property.Masked(i) && brush.weights[i] > 0) + { + float currentValue = floatProperty.Get(i); + float delta = brush.opacity * brush.speed * (Mathf.Lerp(currentValue,averageValue,brush.weights[i]) - currentValue); + + floatProperty.Set(i, currentValue + delta * (modified ? -1 : 1)); + } + } + + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatSmoothBrushMode.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatSmoothBrushMode.cs.meta new file mode 100644 index 00000000..d3a486a2 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatSmoothBrushMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 63dad56a994af4db7bb3449382022c54 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiIntPaintBrushMode.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiIntPaintBrushMode.cs new file mode 100644 index 00000000..426e4c68 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiIntPaintBrushMode.cs @@ -0,0 +1,33 @@ +namespace Obi +{ + public class ObiIntPaintBrushMode : IObiBrushMode + { + ObiBlueprintIntProperty property; + + public ObiIntPaintBrushMode(ObiBlueprintIntProperty property) + { + this.property = property; + } + + public string name + { + get { return "Paint"; } + } + + public bool needsInputValue + { + get { return true; } + } + + public void ApplyStamps(ObiBrushBase brush, bool modified) + { + for (int i = 0; i < brush.weights.Length; ++i) + { + if (!property.Masked(i) && brush.weights[i] > (1 - brush.opacity)) + { + property.Set(i, property.GetDefault()); + } + } + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiIntPaintBrushMode.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiIntPaintBrushMode.cs.meta new file mode 100644 index 00000000..0bef4606 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiIntPaintBrushMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d8882849c81104cef80b3dfdab2021c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiMasterSlavePaintBrushMode.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiMasterSlavePaintBrushMode.cs new file mode 100644 index 00000000..2691275a --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiMasterSlavePaintBrushMode.cs @@ -0,0 +1,39 @@ +namespace Obi +{ + public class ObiMasterSlavePaintBrushMode : IObiBrushMode + { + ObiBlueprintIntProperty property; + + public ObiMasterSlavePaintBrushMode(ObiBlueprintIntProperty property) + { + this.property = property; + } + + public string name + { + get { return "Master/Slave paint"; } + } + + public bool needsInputValue + { + get { return true; } + } + + public void ApplyStamps(ObiBrushBase brush, bool modified) + { + for (int i = 0; i < brush.weights.Length; ++i) + { + if (!property.Masked(i) && brush.weights[i] > (1 - brush.opacity)) + { + int currentValue = property.Get(i); + + if (modified) + currentValue &= ~(int)(1 << property.GetDefault()); + else currentValue |= (int)(1 << property.GetDefault()); + + property.Set(i, currentValue); + } + } + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiMasterSlavePaintBrushMode.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiMasterSlavePaintBrushMode.cs.meta new file mode 100644 index 00000000..83254b41 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiMasterSlavePaintBrushMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 62f8e9adfc17440359a9b51005cd0948 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiSelectBrushMode.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiSelectBrushMode.cs new file mode 100644 index 00000000..66d732c0 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiSelectBrushMode.cs @@ -0,0 +1,33 @@ +namespace Obi +{ + public class ObiSelectBrushMode : IObiBrushMode + { + ObiBlueprintSelected property; + string customName; + + public ObiSelectBrushMode(ObiBlueprintSelected property, string customName = "Select") + { + this.property = property; + this.customName = customName; + } + + public string name + { + get { return customName; } + } + + public bool needsInputValue + { + get { return true; } + } + + public void ApplyStamps(ObiBrushBase brush, bool modified) + { + for (int i = 0; i < brush.weights.Length; ++i) + { + if (brush.weights[i] > 0 && !property.Masked(i)) + property.Set(i,!modified); + } + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiSelectBrushMode.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiSelectBrushMode.cs.meta new file mode 100644 index 00000000..ed3edeab --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiSelectBrushMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9cea7ef42253f4d2b9b5a222521cdee8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushBase.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushBase.cs new file mode 100644 index 00000000..37951d48 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushBase.cs @@ -0,0 +1,161 @@ +using UnityEngine; +using UnityEditor; +using System; + +namespace Obi +{ + + public abstract class ObiBrushBase + { + static int particleBrushHash = "ObiBrushHash".GetHashCode(); + + public IObiBrushMode brushMode; + public float radius = 1; + public float innerRadius = 0.5f; + public float opacity = 1; + public float[] weights = new float[0]; + public bool drag = true; + public float speed = 0.1f; + + protected int controlID; + protected Action onStrokeStart; + protected Action onStrokeUpdate; + protected Action onStrokeEnd; + + public float SqrRadius + { + get{ return radius * radius; } + } + + public ObiBrushBase(Action onStrokeStart, Action onStrokeUpdate, Action onStrokeEnd) + { + this.onStrokeStart = onStrokeStart; + this.onStrokeUpdate = onStrokeUpdate; + this.onStrokeEnd = onStrokeEnd; + } + + protected virtual float WeightFromDistance(float distance) + { + // anything outside the brush should have zero weight: + if (distance > radius) + return 0; + + float t = Mathf.InverseLerp(innerRadius * radius, radius, distance); + return Mathf.SmoothStep(1, 0, t); + } + + protected abstract void GenerateWeights(Vector3[] positions); + + protected virtual void OnMouseDown(Vector3[] positions) + { + if (Event.current.button != 0 || (Event.current.modifiers & ~EventModifiers.Shift) != EventModifiers.None) + return; + + GUIUtility.hotControl = controlID; + + GenerateWeights(positions); + + if (onStrokeStart != null) + onStrokeStart(); + + if (brushMode != null) + brushMode.ApplyStamps(this, (Event.current.modifiers & EventModifiers.Shift) != 0); + + if (onStrokeUpdate != null) + onStrokeUpdate(); + + Event.current.Use(); + } + + protected virtual void OnMouseMove(Vector3[] positions) + { + + } + + protected virtual void OnMouseDrag(Vector3[] positions) + { + + if (GUIUtility.hotControl == controlID && drag) + { + + GenerateWeights(positions); + + if (brushMode != null) + brushMode.ApplyStamps(this, (Event.current.modifiers & EventModifiers.Shift) != 0); + + if (onStrokeUpdate != null) + onStrokeUpdate(); + + Event.current.Use(); + + } + } + + protected virtual void OnMouseUp(Vector3[] positions) + { + if (GUIUtility.hotControl == controlID) + { + + GUIUtility.hotControl = 0; + Event.current.Use(); + + if (onStrokeEnd != null) + onStrokeEnd(); + } + } + + protected virtual void OnRepaint() + { + } + + public void DoBrush(Vector3[] positions) + { + + Matrix4x4 cachedMatrix = Handles.matrix; + + controlID = GUIUtility.GetControlID(particleBrushHash, FocusType.Passive); + Array.Resize(ref weights, positions.Length); + + switch (Event.current.GetTypeForControl(controlID)) + { + + case EventType.MouseDown: + + OnMouseDown(positions); + + break; + + case EventType.MouseMove: + + OnMouseMove(positions); + + SceneView.RepaintAll(); + break; + + case EventType.MouseDrag: + + OnMouseDrag(positions); + + break; + + case EventType.MouseUp: + + OnMouseUp(positions); + + break; + + case EventType.Repaint: + + Handles.matrix = Matrix4x4.identity; + + OnRepaint(); + + Handles.matrix = cachedMatrix; + + break; + + } + } + } +} + diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushBase.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushBase.cs.meta new file mode 100644 index 00000000..692767df --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 094253962d646436792561e708e62376 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushMirrorSettings.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushMirrorSettings.cs new file mode 100644 index 00000000..c4bd65c1 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushMirrorSettings.cs @@ -0,0 +1,51 @@ +using System; +using UnityEngine; + +[Serializable] +public struct ObiBrushMirrorSettings +{ + [Flags] + public enum MirrorAxis + { + None = 0x0, + X = 0x1, + Y = 0x2, + Z = 0x4 + } + + public enum MirrorSpace + { + World = 0, + Camera = 1 + } + + public MirrorAxis axis; + public MirrorSpace space; + + public Vector3 ToAxis() + { + uint m = (uint)axis; + + bool xMirror = (m & (uint)MirrorAxis.X) > 0; + bool yMirror = (m & (uint)MirrorAxis.Y) > 0; + bool zMirror = (m & (uint)MirrorAxis.Z) > 0; + + if (axis < 0 || ((int)axis > (int)MirrorAxis.X + (int)MirrorAxis.Y + (int)MirrorAxis.Z)) + { + return Vector3.one; + } + + Vector3 reflection = Vector3.one; + + if (xMirror) + reflection.x = -1f; + + if (yMirror) + reflection.y = -1f; + + if (zMirror) + reflection.z = -1f; + + return reflection; + } +} diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushMirrorSettings.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushMirrorSettings.cs.meta new file mode 100644 index 00000000..d33b4379 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushMirrorSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d10a9257ac23248418439eb80e02a611 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiRaycastBrush.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiRaycastBrush.cs new file mode 100644 index 00000000..0578e888 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiRaycastBrush.cs @@ -0,0 +1,125 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + + public class ObiRaycastBrush : ObiBrushBase + { + public Matrix4x4 raycastTransform = Matrix4x4.identity; + public Mesh raycastTarget = null; + public bool drawVolume = false; + private List rays = new List(); + private List hits = new List(); + + public ObiBrushMirrorSettings mirror; + + public ObiRaycastBrush(Mesh raycastTarget, Action onStrokeStart, Action onStrokeUpdate, Action onStrokeEnd) : base(onStrokeStart, onStrokeUpdate, onStrokeEnd) + { + radius = 0.1f; + this.raycastTarget = raycastTarget; + rays = new List(); + } + + protected override void GenerateWeights(Vector3[] positions) + { + if (raycastTarget != null) + { + rays.Clear(); + hits.Clear(); + + for (int i = 0; i < positions.Length; i++) + weights[i] = 0; + + var vertices = raycastTarget.vertices; + var triangles = raycastTarget.triangles; + + Ray mouseRay = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); + rays.Add(mouseRay); + + ObiBrushMirrorSettings currentAxis = mirror; + + if (mirror.axis != ObiBrushMirrorSettings.MirrorAxis.None) + { + for (int i = 0; i < 3; i++) + { + currentAxis.axis = (ObiBrushMirrorSettings.MirrorAxis)(1u << i); + if (((uint)mirror.axis & (1u << i)) < 1) + continue; + + Vector3 mirrorVector = currentAxis.ToAxis(); + + if (currentAxis.space == ObiBrushMirrorSettings.MirrorSpace.World) + { + Vector3 center = raycastTarget.bounds.center; + rays.Add(new Ray(Vector3.Scale(mouseRay.origin - center, mirrorVector) + center, + Vector3.Scale(mouseRay.direction, mirrorVector))); + } + else + { + Transform t = SceneView.lastActiveSceneView.camera.transform; + Vector3 o = t.InverseTransformPoint(mouseRay.origin); + Vector3 d = t.InverseTransformDirection(mouseRay.direction); + rays.Add(new Ray(t.TransformPoint(Vector3.Scale(o, mirrorVector)), + t.TransformDirection(Vector3.Scale(d, mirrorVector)))); + } + } + } + + foreach (var ray in rays) + { + if (ObiMeshUtils.WorldRaycast(ray, raycastTransform, vertices, triangles, out ObiRaycastHit hit)) + { + hit.position = raycastTransform.MultiplyPoint3x4(hit.position); + hit.normal = raycastTransform.MultiplyVector(hit.normal); + hits.Add(hit); + + for (int i = 0; i < positions.Length; i++) + { + // get distance from hit position to particle position: + float weight = WeightFromDistance(Vector3.Distance(hit.position, positions[i])); + weights[i] = Mathf.Max(weights[i], weight); + } + } + } + } + } + + protected override void OnMouseMove(Vector3[] positions) + { + base.OnMouseMove(positions); + GenerateWeights(positions); + } + + protected override void OnRepaint() + { + base.OnRepaint(); + + if (raycastTarget != null) + { + Color brushColor = ObiEditorSettings.GetOrCreateSettings().brushColor; + + foreach (var hit in hits) + { + if (hit != null && hit.triangle >= 0) + { + Handles.color = brushColor; + Handles.DrawLine(hit.position, hit.position + hit.normal.normalized * radius); + Handles.DrawWireDisc(hit.position, hit.normal, radius); + Handles.DrawWireDisc(hit.position, hit.normal, innerRadius * radius); + + if (drawVolume) + { + Handles.color = new Color(brushColor.r, brushColor.g, brushColor.b, 0.2f); + Handles.SphereHandleCap(0, hit.position, Quaternion.identity, radius * 2, EventType.Repaint); + } + } + } + } + } + } +} + diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiRaycastBrush.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiRaycastBrush.cs.meta new file mode 100644 index 00000000..d3e4fb08 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiRaycastBrush.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d925323750dca4dcaa5cca91b18521b5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiScreenSpaceBrush.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiScreenSpaceBrush.cs new file mode 100644 index 00000000..341b491b --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiScreenSpaceBrush.cs @@ -0,0 +1,61 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + + public class ObiScreenSpaceBrush : ObiBrushBase + { + public ObiScreenSpaceBrush(Action onStrokeStart, Action onStrokeUpdate, Action onStrokeEnd) : base(onStrokeStart, onStrokeUpdate, onStrokeEnd) + { + radius = 32; + } + + protected override float WeightFromDistance(float distance) + { + // anything outside the brush should have zero weight: + if (distance * EditorGUIUtility.pixelsPerPoint > radius) + return 0; + return 1; + } + + protected override void GenerateWeights(Vector3[] positions) + { + for (int i = 0; i < positions.Length; i++) + { + // get particle position in gui space: + Vector2 pos = HandleUtility.WorldToGUIPoint(positions[i]); + + // get distance from mouse position to particle position: + weights[i] = WeightFromDistance(Vector3.Distance(Event.current.mousePosition, pos)); + } + } + + protected override void OnRepaint() + { + base.OnRepaint(); + + Camera cam = Camera.current; + float depth = (cam.nearClipPlane + cam.farClipPlane) * 0.5f; + + float ppp = EditorGUIUtility.pixelsPerPoint; + Vector2 mousePos = new Vector2(Event.current.mousePosition.x * ppp, + cam.pixelHeight - Event.current.mousePosition.y * ppp); + + Handles.color = ObiEditorSettings.GetOrCreateSettings().brushColor; + Vector3 point = new Vector3(mousePos.x, mousePos.y, depth); + Vector3 wsPoint = cam.ScreenToWorldPoint(point); + + var p1 = cam.ScreenToWorldPoint(new Vector3(1, 0, depth)); + var p2 = cam.ScreenToWorldPoint(new Vector3(0, 0, depth)); + float units = Vector3.Distance(p1, p2); + + Handles.DrawWireDisc(wsPoint, cam.transform.forward, radius * units); + } + + } +} + diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiScreenSpaceBrush.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiScreenSpaceBrush.cs.meta new file mode 100644 index 00000000..71c3ff40 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiScreenSpaceBrush.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38fc5288fb3c94ebeb7eaa88a3bc5119 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditor.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditor.cs new file mode 100644 index 00000000..0e819c69 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditor.cs @@ -0,0 +1,477 @@ +using UnityEngine; +using UnityEngine.Rendering; +using UnityEditor; +using UnityEngine.SceneManagement; +using UnityEditor.SceneManagement; +using System.Collections; +using System.Collections.Generic; +using System; +using System.Linq; + +namespace Obi +{ + + [CustomEditor(typeof(ObiActorBlueprint), true)] + public class ObiActorBlueprintEditor : Editor, IObiSelectableParticleProvider + { + public List tools = new List(); + public int currentToolIndex = 0; + + public List properties = new List(); + public int currentPropertyIndex = 0; + + public List renderModes = new List(); + public int renderModeFlags = 0; + BooleanPreference showRenderModes; + + public bool autoGenerate = false; + public bool editMode = false; + public bool isEditing = false; + protected UnityEngine.Object oldSelection; + + //Additional status info for all particles: + 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]; + public int[] sortedIndices = new int[0]; + + public ObiActorBlueprint blueprint + { + get { return target as ObiActorBlueprint; } + } + + public ObiBlueprintPropertyBase currentProperty + { + get { return GetProperty(currentPropertyIndex); } + } + + public ObiBlueprintEditorTool currentTool + { + get { return GetTool(currentToolIndex); } + } + + public override bool UseDefaultMargins() + { + return false; + } + + public ObiBlueprintPropertyBase GetProperty(int index) + { + return (properties.Count > index && index >= 0) ? properties[index] : null; + } + + public ObiBlueprintEditorTool GetTool(int index) + { + return (tools.Count > index && index >= 0) ? tools[index] : null; + } + +#if (UNITY_2019_1_OR_NEWER) + System.Action renderCallback; +#endif + + 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)); + properties.Add(new ObiBlueprintFilterMask(this)); + + renderModes.Add(new ObiBlueprintRenderModeParticles(this)); + showRenderModes = new BooleanPreference($"{target.GetType()}.showRenderModes", false); + +#if (UNITY_2019_1_OR_NEWER) + renderCallback = new System.Action((cntxt, cam) => { DrawWithCamera(cam); }); + RenderPipelineManager.beginCameraRendering += renderCallback; +#endif + Camera.onPreCull += DrawWithCamera; + SceneView.duringSceneGui += OnSceneGUI; + + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + } + + public virtual void OnDisable() + { + ExitBlueprintEditMode(); + +#if (UNITY_2019_1_OR_NEWER) + RenderPipelineManager.beginCameraRendering -= renderCallback; +#endif + Camera.onPreCull -= DrawWithCamera; + SceneView.duringSceneGui -= OnSceneGUI; + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + + foreach (var tool in tools) + { + tool.OnDisable(); + tool.OnDestroy(); + } + + foreach (var renderMode in renderModes) + { + renderMode.OnDestroy(); + } + } + + void OnPlayModeStateChanged(PlayModeStateChange playmodeState) + { + if (playmodeState == PlayModeStateChange.ExitingEditMode) + { + if (StageUtility.GetCurrentStage() is ObiActorBlueprintEditorStage) + StageUtility.GoToMainStage(); + } + } + + protected bool Generate() + { + if (!blueprint.edited) + { + EditorUtility.SetDirty(target); + CoroutineJob job = new CoroutineJob(); + IEnumerator routine = job.Start(blueprint.Generate()); + EditorCoroutine.ShowCoroutineProgressBar("Generating blueprint...", routine); + Refresh(); + EditorGUIUtility.ExitGUI(); + } + else + { + 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(); + 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 = blueprintValid; + DrawGenerationControls(); + + GUI.enabled = (blueprint != null && !blueprint.empty && !Application.isPlaying); + EditorGUI.BeginChangeCheck(); + editMode = GUILayout.Toggle(editMode, editMode ? "Done" : "Edit", "Button"); + if (EditorGUI.EndChangeCheck()) + { + if (editMode) + EditorApplication.delayCall += EnterBlueprintEditMode; + else + EditorApplication.delayCall += ExitBlueprintEditMode; + } + EditorGUILayout.EndVertical(); + GUI.enabled = true; + + if (isEditing) + DrawTools(); + + if (GUI.changed) + { + 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. + EditorUtility.SetDirty(target); + } + + } + + protected virtual void DrawBlueprintProperties() + { + Editor.DrawPropertiesExcluding(serializedObject, "m_Script"); + } + + private void DrawWithCamera(Camera camera) + { + if (editMode) + { + for (int i = 0; i < renderModes.Count; ++i) + { + if ((1 << i & renderModeFlags) != 0) + renderModes[i].DrawWithCamera(camera); + } + } + } + + void EnterBlueprintEditMode() + { + if (!isEditing) + { + ActiveEditorTracker.sharedTracker.isLocked = true; + + string assetPath = AssetDatabase.GetAssetPath(blueprint); + ObiActorBlueprintEditorStage stage = ObiActorBlueprintEditorStage.CreateStage(assetPath, this); + StageUtility.GoToStage(stage, true); + + isEditing = true; + } + } + + void ExitBlueprintEditMode() + { + if (isEditing) + { + isEditing = false; + AssetDatabase.SaveAssets(); + StageUtility.GoToMainStage(); + } + } + + public void CleanupEditor() + { + ActiveEditorTracker.sharedTracker.isLocked = false; + ObiParticleEditorDrawing.DestroyParticlesMesh(); + } + + public virtual void OnSceneGUI(SceneView sceneView) + { + + if (!isEditing || sceneView.camera == null) + return; + + ResizeParticleArrays(); + + Event e = Event.current; + + if (e.type == EventType.Repaint) + { + + // Update camera facing status and world space positions array: + UpdateParticleVisibility(sceneView.camera); + + // Generate sorted indices for back-to-front rendering: + for (int i = 0; i < sortedIndices.Length; i++) + sortedIndices[i] = i; + Array.Sort(sortedIndices, (a, b) => sqrDistanceToCamera[b].CompareTo(sqrDistanceToCamera[a])); + + // render modes OnSceneRepaint: + for (int i = 0; i < renderModes.Count; ++i) + { + if ((1 << i & renderModeFlags) != 0) + renderModes[i].OnSceneRepaint(sceneView); + } + + // property OnSceneRepaint: + currentProperty.OnSceneRepaint(); + + // update particle color based on visiblity, etc. + UpdateTintColor(); + + // Draw particle handles: + ObiParticleEditorDrawing.DrawParticles(sceneView.camera, blueprint, visible, tint, sortedIndices, dotRadiusScale); + + } + + if (currentTool != null) + currentTool.OnSceneGUI(sceneView); + + } + + protected virtual void UpdateTintColor() + { + Color regularColor = ObiEditorSettings.GetOrCreateSettings().particleColor; + Color selectedColor = ObiEditorSettings.GetOrCreateSettings().selectedParticleColor; + Color activeColor = ObiEditorSettings.GetOrCreateSettings().activeParticleColor; + + for (int i = 0; i < blueprint.positions.Length; i++) + { + // get particle color: + if (activeParticle == i) + tint[i] = activeColor; + else + tint[i] = selectionStatus[i] ? selectedColor : regularColor; + + tint[i].a = visible[i] ? 1 : 0.15f; + } + } + + protected void ResizeParticleArrays() + { + 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); + Array.Resize(ref sqrDistanceToCamera, blueprint.positions.Length); + Array.Resize(ref sortedIndices, blueprint.positions.Length); + } + + } + + public int PropertySelector(int propertyIndex, string label = "Property") + { + // get all particle properties: + string[] propertyNames = new string[properties.Count]; + for (int i = 0; i < properties.Count; ++i) + propertyNames[i] = properties[i].name; + + // Draw a selection dropdown: + return EditorGUILayout.Popup(label, propertyIndex, propertyNames); + } + + public virtual void RenderModeSelector() + { + showRenderModes.value = EditorGUILayout.BeginFoldoutHeaderGroup(showRenderModes, "Render modes"); + if (showRenderModes) + { + EditorGUI.BeginChangeCheck(); + for (int i = 0; i < renderModes.Count; ++i) + { + int value = 1 << i; + + if (EditorGUILayout.Toggle(renderModes[i].name, (value & renderModeFlags) != 0)) + renderModeFlags |= value; + else + renderModeFlags &= ~value; + } + if (EditorGUI.EndChangeCheck()) + Refresh(); + } + EditorGUILayout.EndFoldoutHeaderGroup(); + } + + public void Refresh() + { + // currentProperty might be null after reloading editor during + // asset saving. + currentProperty?.RecalculateMinMax(); + + // refresh render modes: + for (int i = 0; i < renderModes.Count; ++i) + { + if ((1 << i & renderModeFlags) != 0) + renderModes[i].Refresh(); + } + + SceneView.RepaintAll(); + } + + public virtual void UpdateParticleVisibility(Camera cam) + { + + for (int i = 0; i < blueprint.positions.Length; i++) + { + if (blueprint.IsParticleActive(i)) + { + visible[i] = true; + + if (Camera.current != null) + { + Vector3 camToParticle = cam.transform.position - blueprint.positions[i]; + sqrDistanceToCamera[i] = camToParticle.sqrMagnitude; + } + } + } + + if ((renderModeFlags & 1) != 0) + Refresh(); + } + + protected void DrawTools() + { + + GUIContent[] contents = new GUIContent[tools.Count]; + + for (int i = 0; i < tools.Count; ++i) + contents[i] = new GUIContent(tools[i].icon, tools[i].name); + + EditorGUILayout.Space(); + GUILayout.Box(GUIContent.none, ObiEditorUtils.GetSeparatorLineStyle()); + EditorGUILayout.Space(); + + EditorGUILayout.BeginVertical(EditorStyles.inspectorDefaultMargins); + EditorGUI.BeginChangeCheck(); + int newSelectedTool = ObiEditorUtils.DoToolBar(currentToolIndex, contents); + EditorGUILayout.EndVertical(); + + if (EditorGUI.EndChangeCheck()) + { + if (currentTool != null) + currentTool.OnDisable(); + + currentToolIndex = newSelectedTool; + + if (currentTool != null) + currentTool.OnEnable(); + + SceneView.RepaintAll(); + } + + if (currentTool != null) + { + EditorGUILayout.BeginVertical(EditorStyles.inspectorDefaultMargins); + EditorGUILayout.LabelField(currentTool.name, EditorStyles.boldLabel); + + string help = currentTool.GetHelpString(); + if (!help.Equals(string.Empty)) + EditorGUILayout.LabelField(help, EditorStyles.helpBox); + EditorGUILayout.EndVertical(); + + currentTool.OnInspectorGUI(); + } + + } + + public void SetSelected(int particleIndex, bool selected) + { + selectionStatus[particleIndex] = selected; + } + + public bool IsSelected(int particleIndex) + { + return selectionStatus[particleIndex]; + } + + public bool Editable(int particleIndex) + { + return currentTool.Editable(particleIndex) && blueprint.IsParticleActive(particleIndex); + } + } + +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditor.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditor.cs.meta new file mode 100644 index 00000000..c1fbbade --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e39e6eea226f4ecbbe091613ff79f85 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditorStage.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditorStage.cs new file mode 100644 index 00000000..561ee897 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditorStage.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditorStage.cs.meta new file mode 100644 index 00000000..91b16abe --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditorStage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4c8d9d8042d49436c89c515b001088ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiMeshBasedActorBlueprintEditor.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiMeshBasedActorBlueprintEditor.cs new file mode 100644 index 00000000..98630677 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiMeshBasedActorBlueprintEditor.cs @@ -0,0 +1,275 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.IO; + +namespace Obi +{ + [CustomEditor(typeof(ObiMeshBasedActorBlueprint), true)] + public abstract class ObiMeshBasedActorBlueprintEditor : ObiActorBlueprintEditor + { + + [Flags] + public enum ParticleCulling + { + Off = 0, + Back = 1 << 0, + Front = 1 << 1 + } + + protected Mesh visualizationMesh; + protected Mesh visualizationWireMesh; + public ParticleCulling particleCulling = ParticleCulling.Back; + + protected Material gradientMaterial; + protected Material textureExportMaterial; + protected Material paddingMaterial; + + public override void OnEnable() + { + base.OnEnable(); + gradientMaterial = Resources.Load("PropertyGradientMaterial"); + textureExportMaterial = Resources.Load("UVSpaceColorMaterial"); + paddingMaterial = Resources.Load("PaddingMaterial"); + } + + public abstract Mesh sourceMesh + { + get; + } + + 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(); + } + + protected override bool ValidateBlueprint() + { + if (sourceMesh != null) + { + if (!sourceMesh.isReadable) + { + NonReadableMeshWarning(sourceMesh); + return false; + } + return true; + } + return false; + } + + public abstract int VertexToParticle(int vertexIndex); + + public override void UpdateParticleVisibility(Camera cam) + { + if (cam != null) + { + for (int i = 0; i < blueprint.positions.Length; i++) + { + if (blueprint.IsParticleActive(i)) + { + Vector3 camToParticle = cam.transform.position - blueprint.positions[i]; + sqrDistanceToCamera[i] = camToParticle.sqrMagnitude; + + Vector3 normal; + + switch (particleCulling) + { + case ParticleCulling.Off: + visible[i] = true; + break; + case ParticleCulling.Back: + normal = blueprint.restOrientations[i] * Vector3.forward; + visible[i] = Vector3.Dot(normal, camToParticle) > 0; + break; + case ParticleCulling.Front: + 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)) + { + var matrix = Matrix4x4.TRS(Vector3.zero, (blueprint as ObiMeshBasedActorBlueprint).rotation, (blueprint as ObiMeshBasedActorBlueprint).scale); + + Color[] colors = new Color[visualizationMesh.vertexCount]; + for (int i = 0; i < colors.Length; i++) + { + int particle = VertexToParticle(i); + if (particle >= 0 && particle < blueprint.particleCount) + { + float weight = 1; + if (vertexWeights != null) + weight = vertexWeights[particle]; + + colors[i] = weight * currentProperty.ToColor(particle); + } + else + colors[i] = Color.gray; + } + + visualizationMesh.colors = colors; + Graphics.DrawMeshNow(visualizationMesh, matrix); + + Color wireColor = ObiEditorSettings.GetOrCreateSettings().brushWireframeColor; + + if (gradientMaterial.SetPass(1)) + { + for (int i = 0; i < colors.Length; i++) + { + int particle = VertexToParticle(i); + if (particle >= 0 && particle < blueprint.particleCount) + { + if (wireframeWeights != null) + colors[i] = wireColor * wireframeWeights[particle]; + else + colors[i] = wireColor; + } + else + colors[i] = Color.gray; + } + + visualizationWireMesh.colors = colors; + GL.wireframe = true; + Graphics.DrawMeshNow(visualizationWireMesh, matrix); + GL.wireframe = false; + } + + } + + GameObject.DestroyImmediate(visualizationMesh); + GameObject.DestroyImmediate(visualizationWireMesh); + } + + + /** + * Reads particle data from a 2D texture. Can be used to adjust per particle mass, skin radius, etc. using + * a texture instead of painting it in the editor. + * + * Will call onReadProperty once for each particle, passing the particle index and the bilinearly interpolated + * color of the texture at its coordinate. + * + * Be aware that, if a particle corresponds to more than + * one physical vertex and has multiple uv coordinates, + * onReadProperty will be called multiple times for that particle. + */ + public bool ReadParticlePropertyFromTexture(Texture2D source, Action onReadProperty) + { + + if (source == null || onReadProperty == null) + return false; + + Vector2[] uvs = sourceMesh.uv; + + // Iterate over all vertices in the mesh reading back colors from the texture: + for (int i = 0; i < sourceMesh.vertexCount; ++i) + { + try + { + onReadProperty(VertexToParticle(i), source.GetPixelBilinear(uvs[i].x, uvs[i].y)); + } + catch (UnityException e) + { + Debug.LogException(e); + return false; + } + } + + return true; + } + + public bool WriteParticlePropertyToTexture(string path, int width, int height, int padding) + { + + if (path == null || textureExportMaterial == null || !textureExportMaterial.SetPass(0)) + return false; + + if (visualizationMesh == null) + { + visualizationMesh = GameObject.Instantiate(sourceMesh); + } + + RenderTexture tempRT = RenderTexture.GetTemporary(width, height, 0); + RenderTexture paddingRT = RenderTexture.GetTemporary(width, height, 0); + + RenderTexture old = RenderTexture.active; + RenderTexture.active = tempRT; + + GL.PushMatrix(); + + 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++) + colors[i] = currentProperty.ToColor(VertexToParticle(i)); + + visualizationMesh.colors = colors; + Graphics.DrawMeshNow(visualizationMesh, Matrix4x4.identity); + + GL.PopMatrix(); + + // Perform padding/edge dilation + paddingMaterial.SetFloat("_Padding", padding); + Graphics.Blit(tempRT, paddingRT, paddingMaterial); + + // Read result into our Texture2D. + RenderTexture.active = paddingRT; + Texture2D texture = new Texture2D(width, height, TextureFormat.RGBA32, false); + texture.ReadPixels(new Rect(0, 0, width, height), 0, 0); + + RenderTexture.active = old; + RenderTexture.ReleaseTemporary(paddingRT); + RenderTexture.ReleaseTemporary(tempRT); + + byte[] png = texture.EncodeToPNG(); + GameObject.DestroyImmediate(texture); + + try + { + File.WriteAllBytes(path, png); + } + catch (Exception e) + { + Debug.LogException(e); + return false; + } + + AssetDatabase.Refresh(); + + return true; + } + } +} diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiMeshBasedActorBlueprintEditor.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiMeshBasedActorBlueprintEditor.cs.meta new file mode 100644 index 00000000..497250ff --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiMeshBasedActorBlueprintEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c81a94632ae434014aedb4cc241e73e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiMeshUtils.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiMeshUtils.cs new file mode 100644 index 00000000..02ae7b5d --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiMeshUtils.cs @@ -0,0 +1,93 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public static class ObiMeshUtils + { + // Temporary vector3 values + static Vector3 tv1, tv2, tv3, tv4; + + public static bool RayIntersectsTriangle(Vector3 origin, + Vector3 dir, + Vector3 vert0, + Vector3 vert1, + Vector3 vert2, + ref float distance, + ref Vector3 normal) + { + float det; + + ObiVectorMath.Subtract(vert0, vert1, ref tv1); + ObiVectorMath.Subtract(vert0, vert2, ref tv2); + + ObiVectorMath.Cross(dir, tv2, ref tv4); + det = Vector3.Dot(tv1, tv4); + + if (det < Mathf.Epsilon) + return false; + + ObiVectorMath.Subtract(vert0, origin, ref tv3); + + float u = Vector3.Dot(tv3, tv4); + + if (u < 0f || u > det) + return false; + + ObiVectorMath.Cross(tv3, tv1, ref tv4); + + float v = Vector3.Dot(dir, tv4); + + if (v < 0f || u + v > det) + return false; + + distance = Vector3.Dot(tv2, tv4) * (1f / det); + ObiVectorMath.Cross(tv1, tv2, ref normal); + + return true; + } +
 /**
 * Find the nearest triangle intersected by InWorldRay on this mesh. InWorldRay is in world space.
 * @hit contains information about the hit point. @distance limits how far from @InWorldRay.origin the hit
 * point may be. @cullingMode determines what face orientations are tested (Culling.Front only tests front
 * faces, Culling.Back only tests back faces, and Culling.FrontBack tests both).
 * Ray origin and position values are in local space.
 */
 public static bool WorldRaycast(Ray InWorldRay, Matrix4x4 transform, Vector3[] vertices, int[] triangles, out ObiRaycastHit hit, float distance = Mathf.Infinity)
 { + Ray ray = InWorldRay; + if (transform != null) + { + Matrix4x4 inv = transform.inverse; + ray.origin = inv.MultiplyPoint3x4(ray.origin); + ray.direction = inv.MultiplyVector(ray.direction); + }
 return MeshRaycast(ray, vertices, triangles, out hit, distance);
 }

 /**
 * Cast a ray (in model space) against a mesh.
 */
 public static bool MeshRaycast(Ray InRay, Vector3[] vertices, int[] triangles, out ObiRaycastHit hit, float distance = Mathf.Infinity)
 { + Vector3 hitNormal = Vector3.zero; // vars used in loop + Vector3 vert0, vert1, vert2; + Vector3 origin = InRay.origin, direction = InRay.direction; + + hit = new ObiRaycastHit(Mathf.Infinity, + Vector3.zero, + Vector3.zero, + -1); + /** + * Iterate faces, testing for nearest hit to ray origin. + */ + for (int CurTri = 0; CurTri < triangles.Length; CurTri += 3) + { + if (CurTri + 2 >= triangles.Length) continue; + if (triangles[CurTri + 2] >= vertices.Length) continue; + + vert0 = vertices[triangles[CurTri + 0]]; + vert1 = vertices[triangles[CurTri + 1]]; + vert2 = vertices[triangles[CurTri + 2]]; + + // Second pass, test intersection with triangle + if (RayIntersectsTriangle(origin, direction, vert0, vert1, vert2, ref distance, ref hitNormal)) + { + if (distance < hit.distance) + { + hit.distance = distance; + hit.triangle = CurTri / 3; + hit.position = InRay.GetPoint(hit.distance); + hit.normal = hitNormal; + } + } + } + + return hit.triangle > -1;
 } + } + +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiMeshUtils.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiMeshUtils.cs.meta new file mode 100644 index 00000000..90c00ab9 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiMeshUtils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d2a4dd4e807c4053b4e4af4d43db45e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiParticleEditorDrawing.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiParticleEditorDrawing.cs new file mode 100644 index 00000000..b3af4d4a --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiParticleEditorDrawing.cs @@ -0,0 +1,127 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + public class ObiParticleEditorDrawing : MonoBehaviour + { + public static Mesh particlesMesh; + public static Material particleMaterial; + + private static void CreateParticlesMesh() + { + if (particlesMesh == null) + { + particlesMesh = new Mesh(); + particlesMesh.hideFlags = HideFlags.HideAndDontSave; + } + } + + private static void CreateParticleMaterials() + { + if (!particleMaterial) + { + particleMaterial = Resources.Load("EditorParticle"); + } + } + + public static void DestroyParticlesMesh() + { + GameObject.DestroyImmediate(particlesMesh); + } + + public static void DrawParticles(Camera cam, ObiActorBlueprint blueprint, bool[] visible, Color[] baseColor, int[] sortedIndices, float radiusScale = 1) + { + CreateParticlesMesh(); + CreateParticleMaterials(); + + if (!particleMaterial.SetPass(0)) + return; + + //because each vertex needs to be drawn as a quad. + int particlesPerDrawcall = Constants.maxVertsPerMesh / 4; + int drawcallCount = blueprint.particleCount / particlesPerDrawcall + 1; + particlesPerDrawcall = Mathf.Min(particlesPerDrawcall, blueprint.particleCount); + + List vertices = new List(blueprint.activeParticleCount* 4); + List normals = new List(blueprint.activeParticleCount * 4); + List uvs = new List(blueprint.activeParticleCount * 4); + List colors = new List(blueprint.activeParticleCount * 4); + List triangles = new List(blueprint.activeParticleCount * 6); + + Vector3 particleOffset0 = new Vector3(1, 1, 0); + Vector3 particleOffset1 = new Vector3(-1, 1, 0); + Vector3 particleOffset2 = new Vector3(-1, -1, 0); + Vector3 particleOffset3 = new Vector3(1, -1, 0); + + Vector4 radius = new Vector4(1, 0, 0, 0.005f * radiusScale); + + for (int i = 0; i < drawcallCount; ++i) + { + //Draw all cloth vertices: + particlesMesh.Clear(); + vertices.Clear(); + uvs.Clear(); + normals.Clear(); + colors.Clear(); + triangles.Clear(); + + int index = 0; + + // Run over all particles (not only active ones), since they're reordered based on distance to camera. + // Then test if the sorted index is active or not, and skip inactive ones. + int limit = Mathf.Min((i + 1) * particlesPerDrawcall, blueprint.particleCount); + + for (int j = i * particlesPerDrawcall; j < limit; ++j) + { + int sortedIndex = sortedIndices[j]; + + // skip inactive ones: + if (!blueprint.IsParticleActive(sortedIndex)) + continue; + + normals.Add(particleOffset0); + normals.Add(particleOffset1); + normals.Add(particleOffset2); + normals.Add(particleOffset3); + + uvs.Add(radius); + uvs.Add(radius); + uvs.Add(radius); + uvs.Add(radius); + + vertices.Add(blueprint.positions[sortedIndex]); + vertices.Add(blueprint.positions[sortedIndex]); + vertices.Add(blueprint.positions[sortedIndex]); + vertices.Add(blueprint.positions[sortedIndex]); + + colors.Add(baseColor[sortedIndex]); + colors.Add(baseColor[sortedIndex]); + colors.Add(baseColor[sortedIndex]); + colors.Add(baseColor[sortedIndex]); + + triangles.Add(index + 2); + triangles.Add(index + 1); + triangles.Add(index); + triangles.Add(index + 3); + triangles.Add(index + 2); + triangles.Add(index); + + index += 4; + } + + particlesMesh.SetVertices(vertices); + particlesMesh.SetNormals(normals); + particlesMesh.SetColors(colors); + particlesMesh.SetUVs(0, uvs); + particlesMesh.SetTriangles(triangles,0, true); + + Graphics.DrawMeshNow(particlesMesh, Matrix4x4.identity); + } + } + + } + +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiParticleEditorDrawing.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiParticleEditorDrawing.cs.meta new file mode 100644 index 00000000..561f8c74 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/ObiParticleEditorDrawing.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 982f73e0e40c749f09db403624bbd8e1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties.meta new file mode 100644 index 00000000..1efd01e8 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dfda10b0e82f747998295540d5750108 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes.meta new file mode 100644 index 00000000..1de2e12b --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7b9ba4ddc644a4bfa8ab44a5826b8007 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintBoolProperty.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintBoolProperty.cs new file mode 100644 index 00000000..d3b35a8d --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintBoolProperty.cs @@ -0,0 +1,24 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; + +namespace Obi +{ + public abstract class ObiBlueprintBoolProperty : ObiBlueprintProperty + { + public override bool Equals(int firstIndex, int secondIndex) + { + return Get(firstIndex) == Get(secondIndex); + } + + public override void PropertyField() + { + value = EditorGUILayout.Toggle(name, value); + } + + public override Color ToColor(int index) + { + return value ? Color.white : Color.gray; + } + } +} diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintBoolProperty.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintBoolProperty.cs.meta new file mode 100644 index 00000000..719c085a --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintBoolProperty.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 19cb8e21747094d6dae8dff155654066 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintColorProperty.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintColorProperty.cs new file mode 100644 index 00000000..a62d0c3b --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintColorProperty.cs @@ -0,0 +1,31 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; + +namespace Obi +{ + public abstract class ObiBlueprintColorProperty : ObiBlueprintProperty + { + public ObiActorBlueprintEditor editor; + + public ObiBlueprintColorProperty(ObiActorBlueprintEditor editor) + { + this.editor = editor; + } + + public override bool Equals(int firstIndex, int secondIndex) + { + return Get(firstIndex) == Get(secondIndex); + } + + public override void PropertyField() + { + value = EditorGUILayout.ColorField(name, value); + } + + public override Color ToColor(int index) + { + return editor.blueprint.colors[index]; + } + } +} diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintColorProperty.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintColorProperty.cs.meta new file mode 100644 index 00000000..226bed79 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintColorProperty.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 64ab0b4fad7614808acc3cdb75215c50 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintFloatProperty.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintFloatProperty.cs new file mode 100644 index 00000000..8b521744 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintFloatProperty.cs @@ -0,0 +1,94 @@ +using UnityEngine; +using UnityEditor; + +namespace Obi +{ + public abstract class ObiBlueprintFloatProperty : ObiBlueprintProperty + { + public float minVisualizationValue = 0; + public float maxVisualizationValue = 10; + protected float minUserVisualizationValue = 0; + protected float maxUserVisualizationValue = 10; + + protected float? minValue = null; + protected float? maxValue = null; + + public bool autoRange = true; + public ObiActorBlueprintEditor editor; + + public ObiBlueprintFloatProperty(ObiActorBlueprintEditor editor, float? minValue = null, float? maxValue = null) + { + this.editor = editor; + this.minValue = minValue; + this.maxValue = maxValue; + } + + public override bool Equals(int firstIndex, int secondIndex) + { + float v1 = Get(firstIndex); + float v2 = Get(secondIndex); + if (v1 == v2) return true; + return Mathf.Approximately(v1,v2); + } + + public override void PropertyField() + { + EditorGUI.BeginChangeCheck(); + value = EditorGUILayout.FloatField(name, value); + if (EditorGUI.EndChangeCheck()) + { + if (minValue.HasValue) + value = Mathf.Max(minValue.Value, value); + if (maxValue.HasValue) + value = Mathf.Min(maxValue.Value, value); + } + } + + public override void RecalculateMinMax() + { + if (editor != null && autoRange) + { + maxVisualizationValue = float.MinValue; + minVisualizationValue = float.MaxValue; + + for (int i = 0; i < editor.blueprint.activeParticleCount; i++) + { + float v = Get(i); + maxVisualizationValue = Mathf.Max(maxVisualizationValue, v); + minVisualizationValue = Mathf.Min(minVisualizationValue, v); + } + } + else + { + maxVisualizationValue = maxUserVisualizationValue; + minVisualizationValue = minUserVisualizationValue; + } + } + + public override void VisualizationOptions() + { + EditorGUI.BeginChangeCheck(); + autoRange = EditorGUILayout.Toggle("Automatic property range", autoRange); + GUI.enabled = !autoRange; + EditorGUI.indentLevel++; + minUserVisualizationValue = EditorGUILayout.FloatField("Min", minUserVisualizationValue); + maxUserVisualizationValue = EditorGUILayout.FloatField("Max", maxUserVisualizationValue); + EditorGUI.indentLevel--; + GUI.enabled = true; + + if (EditorGUI.EndChangeCheck()) + { + RecalculateMinMax(); + editor.Refresh(); + } + } + + public override Color ToColor(int index) + { + Gradient gradient = ObiEditorSettings.GetOrCreateSettings().propertyGradient; + if (!Mathf.Approximately(minVisualizationValue, maxVisualizationValue)) + return gradient.Evaluate(Mathf.InverseLerp(minVisualizationValue, maxVisualizationValue, Get(index))); + else return gradient.Evaluate(0); + } + } +} diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintFloatProperty.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintFloatProperty.cs.meta new file mode 100644 index 00000000..a8a2539d --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintFloatProperty.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be67f2576200242f080bbcc074dc598a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintIntProperty.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintIntProperty.cs new file mode 100644 index 00000000..4cbc05b8 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintIntProperty.cs @@ -0,0 +1,41 @@ +using UnityEngine; +using UnityEditor; + +namespace Obi +{ + public abstract class ObiBlueprintIntProperty : ObiBlueprintProperty + { + protected int? minValue = null; + protected int? maxValue = null; + + public ObiBlueprintIntProperty(int? minValue = null, int? maxValue = null) + { + this.minValue = minValue; + this.maxValue = maxValue; + } + + public override bool Equals(int firstIndex, int secondIndex) + { + return Get(firstIndex) == Get(secondIndex); + } + + public override void PropertyField() + { + EditorGUI.BeginChangeCheck(); + value = EditorGUILayout.IntField(name, value); + if (EditorGUI.EndChangeCheck()) + { + if (minValue.HasValue) + value = Mathf.Max(minValue.Value, value); + if (maxValue.HasValue) + value = Mathf.Min(maxValue.Value, value); + } + } + + public override Color ToColor(int index) + { + int colorIndex = Get(index) % ObiUtils.colorAlphabet.Length; + return ObiUtils.colorAlphabet[colorIndex]; + } + } +} diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintIntProperty.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintIntProperty.cs.meta new file mode 100644 index 00000000..069bfc02 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintIntProperty.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d8661f9e9cfd044c7bb759145c2a8d73 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintMaskProperty.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintMaskProperty.cs new file mode 100644 index 00000000..e4b0713e --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintMaskProperty.cs @@ -0,0 +1,28 @@ +using UnityEngine; +using UnityEditor; + +namespace Obi +{ + public abstract class ObiBlueprintMaskProperty : ObiBlueprintIntProperty + { + public ObiBlueprintMaskProperty() : base(null,null) + { + } + + public override void PropertyField() + { + value = EditorGUILayout.MaskField(name, value, ObiUtils.categoryNames); + } + + private int MathMod(int a, int b) + { + return (Mathf.Abs(a * b) + a) % b; + } + + public override Color ToColor(int index) + { + int colorIndex = MathMod(Get(index),ObiUtils.colorAlphabet.Length); + return ObiUtils.colorAlphabet[colorIndex]; + } + } +} diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintMaskProperty.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintMaskProperty.cs.meta new file mode 100644 index 00000000..60f3c178 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintMaskProperty.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 165ad17d69adf415ea7609a9373de001 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintProperty.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintProperty.cs new file mode 100644 index 00000000..fb768124 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintProperty.cs @@ -0,0 +1,79 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; + +namespace Obi +{ + public abstract class ObiBlueprintPropertyBase + { + protected List brushModes = new List(); + private int selectedBrushMode; + + public abstract string name + { + get; + } + + public abstract void PropertyField(); + public virtual void VisualizationOptions(){} + public virtual void OnSceneRepaint(){} + + public abstract bool Equals(int firstIndex, int secondIndex); + + public abstract void GetDefaultFromIndex(int index); + public abstract void SetDefaultToIndex(int index); + public virtual bool Masked(int index) + { + return false; + } + + public virtual void RecalculateMinMax() { } + public virtual Color ToColor(int index) { return Color.white; } + + protected void Initialize(ObiBrushBase paintBrush) + { + // Initialize the brush if there's no brush mode set: + if (paintBrush.brushMode == null && brushModes.Count > 0) + { + selectedBrushMode = 0; + paintBrush.brushMode = brushModes[selectedBrushMode]; + } + } + + public void OnSelect(ObiBrushBase paintBrush) + { + // Upon selecting the property, change to the last selected brush mode: + if (brushModes.Count > selectedBrushMode) + paintBrush.brushMode = brushModes[selectedBrushMode]; + + } + + public void BrushModes(ObiBrushBase paintBrush) + { + Initialize(paintBrush); + + GUIContent[] contents = new GUIContent[brushModes.Count]; + for (int i = 0; i < brushModes.Count; ++i) + contents[i] = new GUIContent(brushModes[i].name); + + EditorGUI.BeginChangeCheck(); + selectedBrushMode = ObiEditorUtils.DoToolBar(selectedBrushMode, contents); + if (EditorGUI.EndChangeCheck()) + { + paintBrush.brushMode = brushModes[selectedBrushMode]; + } + } + } + + public abstract class ObiBlueprintProperty : ObiBlueprintPropertyBase + { + protected T value; + + public T GetDefault() { return value; } + public override void GetDefaultFromIndex(int index) { value = Get(index); } + public override void SetDefaultToIndex(int index) { Set(index, value); } + + public abstract T Get(int index); + public abstract void Set(int index, T value); + } +} diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintProperty.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintProperty.cs.meta new file mode 100644 index 00000000..ba7b85be --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintProperty.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 60a83ba184caf4a1aba4da6754776a1d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/IObiPropertyEditableProvider.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/IObiPropertyEditableProvider.cs new file mode 100644 index 00000000..f5345891 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/IObiPropertyEditableProvider.cs @@ -0,0 +1,13 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public interface IObiSelectableParticleProvider + { + void SetSelected(int particleIndex, bool selected); + bool IsSelected(int particleIndex); + bool Editable(int particleIndex); + } + +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/IObiPropertyEditableProvider.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/IObiPropertyEditableProvider.cs.meta new file mode 100644 index 00000000..3bf0408f --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/IObiPropertyEditableProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c3a2643915854763af75d63fa1ec0c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintColor.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintColor.cs new file mode 100644 index 00000000..83d73b9f --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintColor.cs @@ -0,0 +1,33 @@ +using UnityEngine; + +namespace Obi +{ + public class ObiBlueprintColor : ObiBlueprintColorProperty + { + public ObiBlueprintColor(ObiActorBlueprintEditor editor) : base(editor) + { + brushModes.Add(new ObiColorPaintBrushMode(this)); + brushModes.Add(new ObiColorSmoothBrushMode(this)); + } + + public override string name + { + get { return "Color"; } + } + + public override Color Get(int index) + { + return editor.blueprint.colors[index]; + } + public override void Set(int index, Color value) + { + editor.blueprint.colors[index] = value; + editor.blueprint.edited = true; + } + public override bool Masked(int index) + { + return !editor.Editable(index); + } + + } +} diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintColor.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintColor.cs.meta new file mode 100644 index 00000000..a371aaca --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintColor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 810c95482e60a44209c5ece07e287153 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterCategory.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterCategory.cs new file mode 100644 index 00000000..acd53eef --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterCategory.cs @@ -0,0 +1,32 @@ +namespace Obi +{ + public class ObiBlueprintFilterCategory : ObiBlueprintIntProperty + { + public ObiActorBlueprintEditor editor; + + public ObiBlueprintFilterCategory(ObiActorBlueprintEditor editor) : base(ObiUtils.MinCategory, ObiUtils.MaxCategory) + { + this.editor = editor; + brushModes.Add(new ObiIntPaintBrushMode(this)); + } + + public override string name + { + get { return "Category"; } + } + + public override int Get(int index) + { + return ObiUtils.GetCategoryFromFilter(editor.blueprint.filters[index]); + } + 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) + { + return !editor.Editable(index); + } + } +} diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterCategory.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterCategory.cs.meta new file mode 100644 index 00000000..50307493 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterCategory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 08502999496e54f49bb9dee0e0855794 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterMask.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterMask.cs new file mode 100644 index 00000000..6c2d57b5 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterMask.cs @@ -0,0 +1,32 @@ +namespace Obi +{ + public class ObiBlueprintFilterMask : ObiBlueprintMaskProperty + { + public ObiActorBlueprintEditor editor; + + public ObiBlueprintFilterMask(ObiActorBlueprintEditor editor) + { + this.editor = editor; + brushModes.Add(new ObiIntPaintBrushMode(this)); + } + + public override string name + { + get { return "Collides with"; } + } + + public override int Get(int index) + { + return ObiUtils.GetMaskFromFilter(editor.blueprint.filters[index]); + } + 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) + { + return !editor.Editable(index); + } + } +} diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterMask.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterMask.cs.meta new file mode 100644 index 00000000..2bdf6b4a --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterMask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ead8a00c964834718a2411be5d7361f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintMass.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintMass.cs new file mode 100644 index 00000000..32b0e3dd --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintMass.cs @@ -0,0 +1,33 @@ +namespace Obi +{ + public class ObiBlueprintMass : ObiBlueprintFloatProperty + { + + public ObiBlueprintMass(ObiActorBlueprintEditor editor) : base(editor,0) + { + brushModes.Add(new ObiFloatPaintBrushMode(this)); + brushModes.Add(new ObiFloatAddBrushMode(this)); + brushModes.Add(new ObiFloatCopyBrushMode(this, this)); + brushModes.Add(new ObiFloatSmoothBrushMode(this)); + } + + public override string name + { + get { return "Mass"; } + } + + public override float Get(int index) + { + return ObiUtils.InvMassToMass(editor.blueprint.invMasses[index]); + } + 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) + { + return !editor.Editable(index); + } + } +} diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintMass.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintMass.cs.meta new file mode 100644 index 00000000..7dcb1686 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintMass.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bd39fbd4c226542e58dc8ecceb5f8f14 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintRadius.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintRadius.cs new file mode 100644 index 00000000..21f8d384 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintRadius.cs @@ -0,0 +1,37 @@ +using UnityEngine; + +namespace Obi +{ + public class ObiBlueprintRadius : ObiBlueprintFloatProperty + { + + public ObiBlueprintRadius(ObiActorBlueprintEditor editor) : base(editor,0.0000001f) + { + brushModes.Add(new ObiFloatPaintBrushMode(this)); + brushModes.Add(new ObiFloatAddBrushMode(this)); + brushModes.Add(new ObiFloatCopyBrushMode(this, this)); + brushModes.Add(new ObiFloatSmoothBrushMode(this)); + } + + public override string name + { + get { return "Radius"; } + } + + public override float Get(int index) + { + return editor.blueprint.principalRadii[index][0]; + } + public override void Set(int index, float value) + { + 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) + { + return !editor.Editable(index); + } + } +} diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintRadius.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintRadius.cs.meta new file mode 100644 index 00000000..17400981 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintRadius.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b5c61b50f6f4a468aa246f01e5268831 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintSelected.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintSelected.cs new file mode 100644 index 00000000..920a5020 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintSelected.cs @@ -0,0 +1,29 @@ +namespace Obi +{ + public class ObiBlueprintSelected : ObiBlueprintBoolProperty + { + public IObiSelectableParticleProvider provider; + public ObiBlueprintSelected(IObiSelectableParticleProvider provider) + { + this.provider = provider; + } + + public override string name + { + get { return "Selected"; } + } + + public override bool Get(int index) + { + return provider.IsSelected(index); + } + public override void Set(int index, bool value) + { + provider.SetSelected(index,value); + } + public override bool Masked(int index) + { + return !provider.Editable(index); + } + } +} diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintSelected.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintSelected.cs.meta new file mode 100644 index 00000000..d46419e1 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintSelected.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 270971958421b4fec9e5a5ba95699518 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes.meta new file mode 100644 index 00000000..d44e8e2f --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: be5de82c95ded480d881176f73fc19b7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderMode.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderMode.cs new file mode 100644 index 00000000..0b780b88 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderMode.cs @@ -0,0 +1,25 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; + +namespace Obi +{ + public abstract class ObiBlueprintRenderMode + { + protected ObiActorBlueprintEditor editor; + public abstract string name + { + get; + } + public ObiBlueprintRenderMode(ObiActorBlueprintEditor editor) + { + this.editor = editor; + } + + public virtual void DrawWithCamera(Camera camera) {} + public virtual void OnSceneRepaint(SceneView sceneView) {} + public virtual void Refresh(){} + + public virtual void OnDestroy() { } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderMode.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderMode.cs.meta new file mode 100644 index 00000000..585711f9 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d60f616a126974e6d8be81fbbe459bac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeAerodynamicConstraints.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeAerodynamicConstraints.cs new file mode 100644 index 00000000..eeb6854b --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeAerodynamicConstraints.cs @@ -0,0 +1,63 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; + +namespace Obi +{ + public class ObiBlueprintRenderModeAerodynamicConstraints : ObiBlueprintRenderMode + { + public override string name + { + get { return "Aerodynamic constraints"; } + } + + public ObiMeshBasedActorBlueprintEditor meshBasedEditor + { + get { return editor as ObiMeshBasedActorBlueprintEditor; } + } + + public ObiBlueprintRenderModeAerodynamicConstraints(ObiMeshBasedActorBlueprintEditor editor) : base(editor) + { + } + + public override void OnSceneRepaint(SceneView sceneView) + { + var meshEditor = editor as ObiMeshBasedActorBlueprintEditor; + if (meshEditor != null) + { + // Get per-particle normals: + Vector3[] normals = meshEditor.sourceMesh.normals; + Vector3[] particleNormals = new Vector3[meshEditor.blueprint.particleCount]; + for (int i = 0; i < normals.Length; ++i) + { + int welded = meshEditor.VertexToParticle(i); + particleNormals[welded] = normals[i]; + } + + using (new Handles.DrawingScope(Color.blue, Matrix4x4.identity)) + { + var constraints = editor.blueprint.GetConstraintsByType(Oni.ConstraintType.Aerodynamics) as ObiConstraints; + if (constraints != null) + { + Vector3[] lines = new Vector3[constraints.GetActiveConstraintCount() * 2]; + int lineIndex = 0; + + foreach (var batch in constraints.batches) + { + for (int i = 0; i < batch.activeConstraintCount; ++i) + { + int particleIndex = batch.particleIndices[i]; + Vector3 position = editor.blueprint.GetParticlePosition(particleIndex); + lines[lineIndex++] = position; + lines[lineIndex++] = position + particleNormals[particleIndex] * 0.025f; + } + } + + Handles.DrawLines(lines); + } + } + } + } + + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeAerodynamicConstraints.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeAerodynamicConstraints.cs.meta new file mode 100644 index 00000000..c6efaed7 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeAerodynamicConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 18881e26e784d47aaa8aa27c93fe0b49 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeBendConstraints.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeBendConstraints.cs new file mode 100644 index 00000000..a5f68cb9 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeBendConstraints.cs @@ -0,0 +1,44 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; + +namespace Obi +{ + public class ObiBlueprintRenderModeBendConstraints : ObiBlueprintRenderMode + { + public override string name + { + get { return "Bend constraints"; } + } + + public ObiBlueprintRenderModeBendConstraints(ObiActorBlueprintEditor editor) : base(editor) + { + } + + public override void OnSceneRepaint(SceneView sceneView) + { + using (new Handles.DrawingScope(Color.magenta, Matrix4x4.identity)) + { + var constraints = editor.blueprint.GetConstraintsByType(Oni.ConstraintType.Bending) as ObiConstraints; + if (constraints != null) + { + Vector3[] lines = new Vector3[constraints.GetActiveConstraintCount() * 2]; + int lineIndex = 0; + + foreach (var batch in constraints.batches) + { + for (int i = 0; i < batch.activeConstraintCount; ++i) + { + lines[lineIndex++] = editor.blueprint.GetParticlePosition(batch.particleIndices[i * 3]); + lines[lineIndex++] = editor.blueprint.GetParticlePosition(batch.particleIndices[i * 3 + 1]); + } + } + + Handles.DrawLines(lines); + } + } + + } + + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeBendConstraints.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeBendConstraints.cs.meta new file mode 100644 index 00000000..ec81849a --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeBendConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 15e21bc6bea1c4320948413c8d7334bd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeDistanceConstraints.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeDistanceConstraints.cs new file mode 100644 index 00000000..b4fb4f07 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeDistanceConstraints.cs @@ -0,0 +1,44 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; + +namespace Obi +{ + public class ObiBlueprintRenderModeDistanceConstraints : ObiBlueprintRenderMode + { + public override string name + { + get { return "Distance constraints"; } + } + + public ObiBlueprintRenderModeDistanceConstraints(ObiActorBlueprintEditor editor) : base(editor) + { + } + + public override void OnSceneRepaint(SceneView sceneView) + { + + using (new Handles.DrawingScope(Color.green, Matrix4x4.identity)) + { + var constraints = editor.blueprint.GetConstraintsByType(Oni.ConstraintType.Distance) as ObiConstraints; + if (constraints != null) + { + Vector3[] lines = new Vector3[constraints.GetActiveConstraintCount() * 2]; + int lineIndex = 0; + + foreach (var batch in constraints.batches) + { + for (int i = 0; i < batch.activeConstraintCount; ++i) + { + lines[lineIndex++] = editor.blueprint.GetParticlePosition(batch.particleIndices[i * 2]); + lines[lineIndex++] = editor.blueprint.GetParticlePosition(batch.particleIndices[i * 2 + 1]); + } + } + + Handles.DrawLines(lines); + } + } + } + + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeDistanceConstraints.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeDistanceConstraints.cs.meta new file mode 100644 index 00000000..c6b32ad1 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeDistanceConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac734c05a2b994f148fd43cd5829b1be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeMesh.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeMesh.cs new file mode 100644 index 00000000..2f3473b9 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeMesh.cs @@ -0,0 +1,46 @@ +using UnityEditor; + +namespace Obi +{ + public class ObiBlueprintRenderModeMesh : ObiBlueprintRenderMode + { + public override string name + { + get { return "Mesh"; } + } + + public ObiMeshBasedActorBlueprintEditor meshBasedEditor + { + get { return editor as ObiMeshBasedActorBlueprintEditor; } + } + + public ObiBlueprintRenderModeMesh(ObiMeshBasedActorBlueprintEditor editor) : base(editor) + { + } + + public override void OnSceneRepaint(SceneView sceneView) + { + if (meshBasedEditor.currentTool is ObiPaintBrushEditorTool) + { + ObiPaintBrushEditorTool paintTool = (ObiPaintBrushEditorTool)meshBasedEditor.currentTool; + + float[] weights = new float[ObiActorBlueprintEditor.selectionStatus.Length]; + for (int i = 0; i < weights.Length; i++) + { + if (paintTool.selectionMask && !ObiActorBlueprintEditor.selectionStatus[i]) + weights[i] = 0; + else + weights[i] = 1; + } + + float[] wireframeWeights = new float[paintTool.paintBrush.weights.Length]; + for (int i = 0; i < wireframeWeights.Length; i++) + wireframeWeights[i] = paintTool.paintBrush.weights[i]; + + meshBasedEditor.DrawGradientMesh(weights, wireframeWeights); + } + else + meshBasedEditor.DrawGradientMesh(); + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeMesh.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeMesh.cs.meta new file mode 100644 index 00000000..19cb4d49 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeMesh.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dbcd302f71d6446cd976f736b365c7ba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeParticles.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeParticles.cs new file mode 100644 index 00000000..47135af0 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeParticles.cs @@ -0,0 +1,65 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public class ObiBlueprintRenderModeParticles : ObiBlueprintRenderMode + { + public override string name + { + get { return "Particles"; } + } + + 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() + { + if (shader == null) + { + shader = Shader.Find("Obi/EditorParticles"); + if (shader != null) + { + if (!shader.isSupported) + Debug.LogWarning("Particle rendering shader not suported."); + + if (material == null || material.shader != shader) + { + GameObject.DestroyImmediate(material); + material = new Material(shader); + material.hideFlags = HideFlags.HideAndDontSave; + } + } + } + } + + 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, 0, mpb); + } + + public override void Refresh() + { + impostorDrawer.UpdateMeshes(editor.blueprint, editor.visible, editor.tint); + } + + public override void OnDestroy() + { + GameObject.DestroyImmediate(material); + impostorDrawer.ClearMeshes(); + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeParticles.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeParticles.cs.meta new file mode 100644 index 00000000..7e91ad77 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeParticles.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b51ea2becbebe48ba9d77e9d28403f51 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeShapeMatchingConstraints.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeShapeMatchingConstraints.cs new file mode 100644 index 00000000..58224382 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeShapeMatchingConstraints.cs @@ -0,0 +1,54 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; + +namespace Obi +{ + public class ObiBlueprintRenderModeShapeMatchingConstraints : ObiBlueprintRenderMode + { + public override string name + { + get { return "Shape matching clusters"; } + } + + public ObiBlueprintRenderModeShapeMatchingConstraints(ObiActorBlueprintEditor editor) : base(editor) + { + } + + public override void OnSceneRepaint(SceneView sceneView) + { + + using (new Handles.DrawingScope(Color.cyan, Matrix4x4.identity)) + { + var constraints = editor.blueprint.GetConstraintsByType(Oni.ConstraintType.ShapeMatching) as ObiConstraints; + if (constraints != null) + { + List lines = new List(); + + foreach (var batch in constraints.batches) + { + for (int i = 0; i < batch.activeConstraintCount; ++i) + { + int first = batch.firstIndex[i]; + Vector3 p1 = editor.blueprint.GetParticlePosition(batch.particleIndices[first]); + + for (int j = 1; j < batch.numIndices[i]; ++j) + { + + int index = first + j; + Vector3 p2 = editor.blueprint.GetParticlePosition(batch.particleIndices[index]); + + lines.Add(p1); + lines.Add(p2); + } + + } + } + + Handles.DrawLines(lines.ToArray()); + } + } + } + + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeShapeMatchingConstraints.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeShapeMatchingConstraints.cs.meta new file mode 100644 index 00000000..201059f1 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeShapeMatchingConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e5ff128cfebee45ffb8266eb3e75522e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeTetherConstraints.cs b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeTetherConstraints.cs new file mode 100644 index 00000000..bd33fafd --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeTetherConstraints.cs @@ -0,0 +1,43 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; + +namespace Obi +{ + public class ObiBlueprintRenderModeTetherConstraints : ObiBlueprintRenderMode + { + public override string name + { + get { return "Tether constraints"; } + } + + public ObiBlueprintRenderModeTetherConstraints(ObiActorBlueprintEditor editor) : base(editor) + { + } + + public override void OnSceneRepaint(SceneView sceneView) + { + using (new Handles.DrawingScope(Color.yellow, Matrix4x4.identity)) + { + var constraints = editor.blueprint.GetConstraintsByType(Oni.ConstraintType.Tether) as ObiConstraints; + if (constraints != null) + { + Vector3[] lines = new Vector3[constraints.GetActiveConstraintCount() * 2]; + int lineIndex = 0; + + foreach (var batch in constraints.batches) + { + for (int i = 0; i < batch.activeConstraintCount; ++i) + { + lines[lineIndex++] = editor.blueprint.GetParticlePosition(batch.particleIndices[i * 2]); + lines[lineIndex++] = editor.blueprint.GetParticlePosition(batch.particleIndices[i * 2 + 1]); + } + } + + Handles.DrawLines(lines); + } + } + } + + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeTetherConstraints.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeTetherConstraints.cs.meta new file mode 100644 index 00000000..94886036 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeTetherConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 63054cbedb75c4aa7906bf1c24552085 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Collisions.meta b/xiaofang/Assets/Obi/Editor/Common/Collisions.meta new file mode 100644 index 00000000..e3f2bc76 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Collisions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5759f1c7beafc485489fb47abffaa269 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Collisions/ObiColliderEditor.cs b/xiaofang/Assets/Obi/Editor/Common/Collisions/ObiColliderEditor.cs new file mode 100644 index 00000000..a12dae90 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Collisions/ObiColliderEditor.cs @@ -0,0 +1,104 @@ +using UnityEditor; +using UnityEngine; + +namespace Obi{ + + [CustomEditor(typeof(ObiColliderBase), true), CanEditMultipleObjects] + public class ObiColliderEditor : Editor + { + + ObiColliderBase collider; + SerializedProperty collisionFilter; + + public void OnEnable() + { + collider = (ObiColliderBase)target; + 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); + rect = EditorGUI.PrefixLabel(rect, label); + + EditorGUI.BeginChangeCheck(); + var newCategory = EditorGUI.Popup(rect, ObiUtils.GetCategoryFromFilter(collider.Filter), ObiUtils.categoryNames); + if (EditorGUI.EndChangeCheck()) + { + foreach (ObiColliderBase t in targets) + { + Undo.RecordObject(t, "Set collision category"); + t.Filter = ObiUtils.MakeFilter(ObiUtils.GetMaskFromFilter(t.Filter), newCategory); + PrefabUtility.RecordPrefabInstancePropertyModifications(t); + } + } + EditorGUI.EndProperty(); + + rect = EditorGUILayout.GetControlRect(); + label = EditorGUI.BeginProperty(rect, new GUIContent("Collides with"), collisionFilter); + rect = EditorGUI.PrefixLabel(rect, label); + + EditorGUI.BeginChangeCheck(); + var newMask = EditorGUI.MaskField(rect, ObiUtils.GetMaskFromFilter(collider.Filter), ObiUtils.categoryNames); + if (EditorGUI.EndChangeCheck()) + { + foreach (ObiColliderBase t in targets) + { + Undo.RecordObject(t, "Set collision mask"); + t.Filter = ObiUtils.MakeFilter(newMask, ObiUtils.GetCategoryFromFilter(t.Filter)); + PrefabUtility.RecordPrefabInstancePropertyModifications(t); + } + } + EditorGUI.EndProperty(); + + DrawPropertiesExcluding(serializedObject, "m_Script", "CollisionMaterial", "filter", "Thickness", "Inverted"); + + + // Apply changes to the serializedProperty + if (GUI.changed) + { + serializedObject.ApplyModifiedProperties(); + } + + } + + } +} + + diff --git a/xiaofang/Assets/Obi/Editor/Common/Collisions/ObiColliderEditor.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Collisions/ObiColliderEditor.cs.meta new file mode 100644 index 00000000..0373df8a --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Collisions/ObiColliderEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7c99a0a8358754501b3c8089185b0e6f +timeCreated: 1502034385 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Collisions/ObiDistanceFieldEditor.cs b/xiaofang/Assets/Obi/Editor/Common/Collisions/ObiDistanceFieldEditor.cs new file mode 100644 index 00000000..1ca4989c --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Collisions/ObiDistanceFieldEditor.cs @@ -0,0 +1,178 @@ +using UnityEngine; +using UnityEditor; +using System.IO; +using System.Collections; + +namespace Obi{ + [CustomEditor(typeof(ObiDistanceField))] + public class ObiDistanceFieldEditor : Editor + { + + ObiDistanceField distanceField; + + PreviewHelpers previewHelper; + Vector2 previewDir; + Material previewMaterial; + + Mesh previewMesh; + Texture3D volumeTexture; + + protected IEnumerator routine; + + private void UpdatePreview(){ + + CleanupPreview(); + + if (distanceField.InputMesh != null){ + + previewMesh = CreateMeshForBounds(distanceField.FieldBounds); + previewMesh.hideFlags = HideFlags.HideAndDontSave; + + volumeTexture = distanceField.GetVolumeTexture(64); + volumeTexture.hideFlags = HideFlags.HideAndDontSave; + + previewMaterial = Resources.Load("DistanceFieldPreview"); + previewMaterial.SetTexture("_Volume",volumeTexture); + previewMaterial.SetVector("_AABBMin",-distanceField.FieldBounds.extents); + previewMaterial.SetVector("_AABBMax",distanceField.FieldBounds.extents); + } + + } + + private void CleanupPreview(){ + GameObject.DestroyImmediate(previewMesh); + GameObject.DestroyImmediate(volumeTexture); + } + + public void OnEnable(){ + distanceField = (ObiDistanceField) target; + previewHelper = new PreviewHelpers(); + UpdatePreview(); + } + + public void OnDisable(){ + EditorUtility.ClearProgressBar(); + previewHelper.Cleanup(); + CleanupPreview(); + } + + public override void OnInspectorGUI() { + + serializedObject.UpdateIfRequiredOrScript(); + + Editor.DrawPropertiesExcluding(serializedObject,"m_Script"); + + GUI.enabled = (distanceField.InputMesh != null); + if (GUILayout.Button("Generate")){ + // Start a coroutine job in the editor. + EditorUtility.SetDirty(target); + CoroutineJob job = new CoroutineJob(); + routine = job.Start( distanceField.Generate()); + EditorCoroutine.ShowCoroutineProgressBar("Generating distance field", routine); + UpdatePreview(); + EditorGUIUtility.ExitGUI(); + } + GUI.enabled = true; + + int nodeCount = (distanceField.nodes != null ? distanceField.nodes.Count : 0); + float resolution = distanceField.FieldBounds.size.x / distanceField.EffectiveSampleSize; + EditorGUILayout.HelpBox("Nodes: "+ nodeCount+"\n"+ + "Size in memory: "+ (nodeCount * 0.062f).ToString("0.#") +" kB\n"+ + "Compressed to: " + (nodeCount / Mathf.Pow(resolution,3) * 100).ToString("0.##") + "%",MessageType.Info); + + if (GUI.changed) + serializedObject.ApplyModifiedProperties(); + + } + + public override bool HasPreviewGUI(){ + return true; + } + + public override void OnInteractivePreviewGUI(Rect region, GUIStyle background) + { + previewDir = PreviewHelpers.Drag2D(previewDir, region); + + if (Event.current.type != EventType.Repaint || previewMesh == null) + { + return; + } + + Quaternion quaternion = Quaternion.Euler(this.previewDir.y, 0f, 0f) * Quaternion.Euler(0f, this.previewDir.x, 0f) * Quaternion.Euler(0, 120, -20f); + + previewHelper.BeginPreview(region, background); + + Bounds bounds = previewMesh.bounds; + float magnitude = Mathf.Sqrt(bounds.extents.sqrMagnitude); + float num = 4f * magnitude; + previewHelper.m_Camera.transform.position = -Vector3.forward * num; + previewHelper.m_Camera.transform.rotation = Quaternion.identity; + previewHelper.m_Camera.nearClipPlane = num - magnitude * 1.1f; + previewHelper.m_Camera.farClipPlane = num + magnitude * 1.1f; + + // Compute matrix to rotate the mesh around the center of its bounds: + Matrix4x4 matrix = Matrix4x4.TRS(Vector3.zero,quaternion,Vector3.one) * Matrix4x4.TRS(-bounds.center,Quaternion.identity,Vector3.one); + + Graphics.DrawMesh(previewMesh, matrix, previewMaterial,1, previewHelper.m_Camera, 0); + + Texture texture = previewHelper.EndPreview(); + GUI.DrawTexture(region, texture, ScaleMode.StretchToFill, true); + + } + + /** + * Creates a solid mesh from some Bounds. This is used to display the distance field volumetric preview. + */ + private Mesh CreateMeshForBounds(Bounds b){ + Mesh m = new Mesh(); + + /** Indices of bounds corners: + + Y + 2 6 + +------+ + 3 .'| 7 .'| + +---+--+' | + | | | | + | +--+---+ X + | .' 0 | .' 4 + +------+' + Z 1 5 + + */ + Vector3[] vertices = new Vector3[8]{ + b.center + new Vector3(-b.extents.x,-b.extents.y,-b.extents.z), //0 + b.center + new Vector3(-b.extents.x,-b.extents.y,b.extents.z), //1 + b.center + new Vector3(-b.extents.x,b.extents.y,-b.extents.z), //2 + b.center + new Vector3(-b.extents.x,b.extents.y,b.extents.z), //3 + b.center + new Vector3(b.extents.x,-b.extents.y,-b.extents.z), //4 + b.center + new Vector3(b.extents.x,-b.extents.y,b.extents.z), //5 + b.center + new Vector3(b.extents.x,b.extents.y,-b.extents.z), //6 + b.center + new Vector3(b.extents.x,b.extents.y,b.extents.z) //7 + }; + int[] triangles = new int[36]{ + 2,3,7, + 6,2,7, + + 7,5,4, + 6,7,4, + + 3,1,5, + 7,3,5, + + 2,0,3, + 3,0,1, + + 6,4,2, + 2,4,0, + + 4,5,0, + 5,1,0 + }; + + m.vertices = vertices; + m.triangles = triangles; + return m; + } + } +} diff --git a/xiaofang/Assets/Obi/Editor/Common/Collisions/ObiDistanceFieldEditor.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Collisions/ObiDistanceFieldEditor.cs.meta new file mode 100644 index 00000000..60e8555c --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Collisions/ObiDistanceFieldEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5d47dd3a8215841aca1fe5b272cb24f2 +timeCreated: 1507046737 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Collisions/ObiForceZoneEditor.cs b/xiaofang/Assets/Obi/Editor/Common/Collisions/ObiForceZoneEditor.cs new file mode 100644 index 00000000..884ac4c0 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Editor/Common/Collisions/ObiForceZoneEditor.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Collisions/ObiForceZoneEditor.cs.meta new file mode 100644 index 00000000..99479b1e --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Collisions/ObiForceZoneEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 724435a7a84154b27bb0c8ea49b611df +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Constraints.meta b/xiaofang/Assets/Obi/Editor/Common/Constraints.meta new file mode 100644 index 00000000..8cfd63c9 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Constraints.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cf28ba8ff6a7140e6a7e50a5030ff3e7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Constraints/ObiConstraintParametersDrawer.cs b/xiaofang/Assets/Obi/Editor/Common/Constraints/ObiConstraintParametersDrawer.cs new file mode 100644 index 00000000..579843b3 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Constraints/ObiConstraintParametersDrawer.cs @@ -0,0 +1,73 @@ +using UnityEngine; +using UnityEditor; +using System; + +namespace Obi +{ + + [CustomPropertyDrawer(typeof(Oni.ConstraintParameters))] + public class ObiConstraintParametersDrawer : PropertyDrawer + { + public static float padding = 4; + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + float propHeight = EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + + EditorGUI.BeginProperty(position, label, property); + + SerializedProperty enabled = property.FindPropertyRelative("enabled"); + Rect contRect = new Rect(position.x+padding, position.y+padding, position.width-padding*2, propHeight); + + // Draw a box around the parameters: + GUI.enabled = enabled.boolValue; + GUI.Box(position,"",ObiEditorUtils.GetToggleablePropertyGroupStyle()); + GUI.enabled = true; + + // 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){ + + 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); + Rect sorRect = new Rect(position.x+padding, position.y+propHeight*3+padding, position.width-padding*2, EditorGUIUtility.singleLineHeight); + + EditorGUI.indentLevel++; + Rect evalCtrl = EditorGUI.PrefixLabel(evalRect,new GUIContent("Evaluation")); + EditorGUI.PropertyField(evalCtrl, property.FindPropertyRelative("evaluationOrder"),GUIContent.none); + + Rect iterCtrl = EditorGUI.PrefixLabel(iterRect,new GUIContent("Iterations")); + EditorGUI.PropertyField(iterCtrl, property.FindPropertyRelative("iterations"),GUIContent.none); + + Rect sorCtrl = EditorGUI.PrefixLabel(sorRect,new GUIContent("Relaxation")); + EditorGUI.PropertyField(sorCtrl, property.FindPropertyRelative("SORFactor"),GUIContent.none); + EditorGUI.indentLevel--; + + } + + EditorGUI.EndProperty(); + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + SerializedProperty enabled = property.FindPropertyRelative("enabled"); + if (enabled.boolValue) + return EditorGUIUtility.singleLineHeight*4 + EditorGUIUtility.standardVerticalSpacing*3 + padding*2; + else + return EditorGUIUtility.singleLineHeight + padding*2; + } + } + +} + diff --git a/xiaofang/Assets/Obi/Editor/Common/Constraints/ObiConstraintParametersDrawer.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Constraints/ObiConstraintParametersDrawer.cs.meta new file mode 100644 index 00000000..ec24a969 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Constraints/ObiConstraintParametersDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: bc70cbc4838a4467687180e4d555b069 +timeCreated: 1515057027 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/ObiAboutWindow.cs b/xiaofang/Assets/Obi/Editor/Common/ObiAboutWindow.cs new file mode 100644 index 00000000..e7b22a08 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/ObiAboutWindow.cs @@ -0,0 +1,73 @@ + +using System; +using UnityEditor; +using UnityEngine; + +namespace Obi +{ + public class ObiAboutWindow : EditorWindow + { + + [MenuItem ("Window/Obi/About")] + public static void Init() + { + ObiAboutWindow window = (ObiAboutWindow)EditorWindow.GetWindow(typeof(ObiAboutWindow),true,"Welcome to Obi!"); + window.position = new Rect(Screen.width / 2, Screen.height / 2, 380, 300); + window.maxSize = window.minSize = new Vector2(380,300); + window.ShowPopup(); + } + + void OnGUI() + { + // Draw logo and copyright notice: + EditorGUILayout.BeginHorizontal(); + + GUILayout.Label(Resources.Load("obi_editor_logo")); + + EditorGUILayout.BeginVertical(GUILayout.MaxHeight(119.0f/EditorGUIUtility.pixelsPerPoint)); + + GUILayout.FlexibleSpace(); + + Color oldColor = GUI.contentColor; + GUI.contentColor = Color.black; + GUILayout.Label("Obi - Unified particle physics",EditorStyles.centeredGreyMiniLabel); + GUI.contentColor = oldColor; + + GUILayout.Label("© Copyright Virtual Method, 2015-2016.\nAll rights reserved.",EditorStyles.centeredGreyMiniLabel); + + GUILayout.FlexibleSpace(); + + EditorGUILayout.EndVertical(); + + EditorGUILayout.EndHorizontal(); + + DrawAboutGUI(); + + } + + void DrawAboutGUI(){ + + GUILayout.FlexibleSpace(); + + EditorGUILayout.LabelField("Programming:",EditorStyles.centeredGreyMiniLabel); + EditorGUILayout.LabelField("José María Méndez González",EditorStyles.centeredGreyMiniLabel); + + EditorGUILayout.LabelField("Additional resources:",EditorStyles.centeredGreyMiniLabel); + EditorGUILayout.LabelField("Lidia Martínez Prado",EditorStyles.centeredGreyMiniLabel); + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Manual",EditorStyles.toolbarButton)) + Application.OpenURL("http://obi.virtualmethodstudio.com/tutorials/"); + if (GUILayout.Button("API docs",EditorStyles.toolbarButton)) + Application.OpenURL("http://obi.virtualmethodstudio.com/docs/"); + if (GUILayout.Button("visit www.virtualmethodstudio.com",EditorStyles.toolbarButton)) + Application.OpenURL("http://www.virtualmethodstudio.com"); + if (GUILayout.Button("Create preferences file", EditorStyles.toolbarButton)) + ObiEditorSettings.GetOrCreateSettings(); + + } + } +} + + diff --git a/xiaofang/Assets/Obi/Editor/Common/ObiAboutWindow.cs.meta b/xiaofang/Assets/Obi/Editor/Common/ObiAboutWindow.cs.meta new file mode 100644 index 00000000..6166f573 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/ObiAboutWindow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c6764c51caa004a25ab49afc9865d2b3 +timeCreated: 1498062614 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/ObiSettingsProvider.cs b/xiaofang/Assets/Obi/Editor/Common/ObiSettingsProvider.cs new file mode 100644 index 00000000..a03cb52b --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/ObiSettingsProvider.cs @@ -0,0 +1,81 @@ +using System.Collections.Generic; +using System.IO; +using UnityEditor; +using UnityEngine; + +namespace Obi +{ + class ObiSettingsProvider : SettingsProvider + { + private SerializedObject m_ObiSettings; + + class Styles + { + public static GUIContent particleBrush = new GUIContent("Brush"); + 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"; + public ObiSettingsProvider(string path, SettingsScope scope = SettingsScope.User) + : base(path, scope) { } + + public static bool IsSettingsAvailable() + { + return File.Exists(m_ObiEditorSettingsPath); + } + +#if UNITY_2019_1_OR_NEWER + public override void OnActivate(string searchContext, UnityEngine.UIElements.VisualElement rootElement) +#else + public override void OnActivate(string searchContext, UnityEngine.Experimental.UIElements.VisualElement rootElement) +#endif + { + // This function is called when the user clicks on the MyCustom element in the Settings window. + m_ObiSettings = ObiEditorSettings.GetSerializedSettings(); + } + + public override void OnDeactivate() + { + base.OnDeactivate(); + + if (m_ObiSettings != null) + m_ObiSettings.ApplyModifiedProperties(); + } + + public override void OnGUI(string searchContext) + { + EditorGUILayout.LabelField("Colors", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(m_ObiSettings.FindProperty("m_ParticleBrush"), Styles.particleBrush); + 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 + [SettingsProvider] + public static SettingsProvider CreateMyCustomSettingsProvider() + { + if (IsSettingsAvailable()) + { + var provider = new ObiSettingsProvider("Preferences/Obi", SettingsScope.User); + + // Automatically extract all keywords from the Styles. + provider.keywords = GetSearchKeywordsFromGUIContentProperties(); + return provider; + } + + // Settings Asset doesn't exist yet; no need to display anything in the Settings window. + return null; + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Common/ObiSettingsProvider.cs.meta b/xiaofang/Assets/Obi/Editor/Common/ObiSettingsProvider.cs.meta new file mode 100644 index 00000000..7c37da33 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/ObiSettingsProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 19ac664f594284b3c92ddb354155d814 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Rendering.meta b/xiaofang/Assets/Obi/Editor/Common/Rendering.meta new file mode 100644 index 00000000..07c70140 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Rendering.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 60a71308789c34bb8a53415b380a6706 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Rendering/ObiParticleRendererEditor.cs b/xiaofang/Assets/Obi/Editor/Common/Rendering/ObiParticleRendererEditor.cs new file mode 100644 index 00000000..310ac05e --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Rendering/ObiParticleRendererEditor.cs @@ -0,0 +1,32 @@ +using UnityEditor; +using UnityEngine; + +namespace Obi{ + + /** + * Custom inspector for ObiParticleRenderer component. + */ + + [CustomEditor(typeof(ObiParticleRenderer)), CanEditMultipleObjects] + public class ObiParticleHandleEditor : Editor + { + + public override void OnInspectorGUI() { + + serializedObject.UpdateIfRequiredOrScript(); + + Editor.DrawPropertiesExcluding(serializedObject,"m_Script"); + + // Apply changes to the serializedProperty + if (GUI.changed){ + + serializedObject.ApplyModifiedProperties(); + + } + + } + + } + +} + diff --git a/xiaofang/Assets/Obi/Editor/Common/Rendering/ObiParticleRendererEditor.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Rendering/ObiParticleRendererEditor.cs.meta new file mode 100644 index 00000000..e249bdb5 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Rendering/ObiParticleRendererEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2a7e6fcc51ab349e687aa6ca5bdf6739 +timeCreated: 1463090765 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Solver.meta b/xiaofang/Assets/Obi/Editor/Common/Solver.meta new file mode 100644 index 00000000..0d6cdda6 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Solver.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d82f874c48e764fb8b49f1767f76a94a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Solver/ObiSolverEditor.cs b/xiaofang/Assets/Obi/Editor/Common/Solver/ObiSolverEditor.cs new file mode 100644 index 00000000..542a1dc5 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Solver/ObiSolverEditor.cs @@ -0,0 +1,344 @@ +using UnityEditor; +using UnityEngine; +using UnityEditorInternal; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + + /** + * Custom inspector for ObiSolver components. + * Allows particle selection and constraint edition. + * + * Selection: + * + * - To select a particle, left-click on it. + * - You can select multiple particles by holding shift while clicking. + * - To deselect all particles, click anywhere on the object except a particle. + * + * Constraints: + * + * - To edit particle constraints, select the particles you wish to edit. + * - Constraints affecting any of the selected particles will appear in the inspector. + * - To add a new pin constraint to the selected particle(s), click on "Add Pin Constraint". + * + */ + [CustomEditor(typeof(ObiSolver)), CanEditMultipleObjects] + public class ObiSolverEditor : Editor + { + + [MenuItem("GameObject/3D Object/Obi/Obi Solver", false, 100)] + static void CreateObiSolver(MenuCommand menuCommand) + { + GameObject go = ObiEditorUtils.CreateNewSolver(); + GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject); + Selection.activeGameObject = go; + } + + ObiSolver solver; + + SerializedProperty backend; + SerializedProperty substeps; + SerializedProperty maxStepsPerFrame; + SerializedProperty synchronization; + SerializedProperty simulateWhenInvisible; + SerializedProperty parameters; + SerializedProperty gravity; + SerializedProperty gravitySpace; + SerializedProperty ambientWind; + SerializedProperty windSpace; + SerializedProperty worldLinearInertiaScale; + SerializedProperty worldAngularInertiaScale; + + SerializedProperty foamSubsteps; + SerializedProperty maxFoamVelocityStretch; + SerializedProperty foamFade; + SerializedProperty foamAccelAgingRange; + SerializedProperty foamAccelAging; + + SerializedProperty distanceConstraintParameters; + SerializedProperty bendingConstraintParameters; + SerializedProperty particleCollisionConstraintParameters; + SerializedProperty particleFrictionConstraintParameters; + SerializedProperty collisionConstraintParameters; + SerializedProperty frictionConstraintParameters; + SerializedProperty skinConstraintParameters; + SerializedProperty volumeConstraintParameters; + SerializedProperty shapeMatchingConstraintParameters; + SerializedProperty tetherConstraintParameters; + SerializedProperty pinConstraintParameters; + 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; + + public void OnEnable() + { + solver = (ObiSolver)target; + constraintLabelContent = new GUIContent(); + + 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"); + worldLinearInertiaScale = serializedObject.FindProperty("worldLinearInertiaScale"); + worldAngularInertiaScale = serializedObject.FindProperty("worldAngularInertiaScale"); + + foamSubsteps = serializedObject.FindProperty("foamSubsteps"); + 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"); + particleFrictionConstraintParameters = serializedObject.FindProperty("particleFrictionConstraintParameters"); + collisionConstraintParameters = serializedObject.FindProperty("collisionConstraintParameters"); + frictionConstraintParameters = serializedObject.FindProperty("frictionConstraintParameters"); + skinConstraintParameters = serializedObject.FindProperty("skinConstraintParameters"); + volumeConstraintParameters = serializedObject.FindProperty("volumeConstraintParameters"); + shapeMatchingConstraintParameters = serializedObject.FindProperty("shapeMatchingConstraintParameters"); + tetherConstraintParameters = serializedObject.FindProperty("tetherConstraintParameters"); + pinConstraintParameters = serializedObject.FindProperty("pinConstraintParameters"); + 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 override void OnInspectorGUI() + { + serializedObject.UpdateIfRequiredOrScript(); + EditorGUILayout.HelpBox("Particles:" + solver.allocParticleCount + "\n" + + "Simplices:" + solver.simplexCounts.simplexCount + "\n" + + "Contacts:" + solver.contactCount + "\n" + + "Simplex contacts:" + solver.particleContactCount, MessageType.None); + + solverFoldout.value = EditorGUILayout.BeginFoldoutHeaderGroup(solverFoldout, "Solver settings"); + if (solverFoldout) + { + EditorGUI.BeginChangeCheck(); + 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. 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()) + { + serializedObject.ApplyModifiedProperties(); + foreach (var t in targets) + (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(); + + simulationFoldout.value = EditorGUILayout.BeginFoldoutHeaderGroup(simulationFoldout, "Simulation settings"); + if (simulationFoldout) + { + 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.EndFoldoutHeaderGroup(); + + advectionFoldout.value = EditorGUILayout.BeginFoldoutHeaderGroup(advectionFoldout, "Foam settings"); + if (advectionFoldout) + { + EditorGUILayout.PropertyField(foamSubsteps); + 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("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.EndFoldoutHeaderGroup(); + + constraintsFoldout.value = EditorGUILayout.BeginFoldoutHeaderGroup(constraintsFoldout, "Constraint settings"); + if (constraintsFoldout) + { + constraintLabelContent.text = "Distance"; + EditorGUILayout.PropertyField(distanceConstraintParameters, constraintLabelContent); + + constraintLabelContent.text = "Bending"; + EditorGUILayout.PropertyField(bendingConstraintParameters, constraintLabelContent); + + constraintLabelContent.text = "Particle collision / Queries"; + EditorGUILayout.PropertyField(particleCollisionConstraintParameters, constraintLabelContent); + + constraintLabelContent.text = "Particle friction"; + EditorGUILayout.PropertyField(particleFrictionConstraintParameters, constraintLabelContent); + + constraintLabelContent.text = "Collision"; + EditorGUILayout.PropertyField(collisionConstraintParameters, constraintLabelContent); + + constraintLabelContent.text = "Friction"; + EditorGUILayout.PropertyField(frictionConstraintParameters, constraintLabelContent); + + constraintLabelContent.text = "Skin"; + EditorGUILayout.PropertyField(skinConstraintParameters, constraintLabelContent); + + constraintLabelContent.text = "Volume"; + EditorGUILayout.PropertyField(volumeConstraintParameters, constraintLabelContent); + + constraintLabelContent.text = "Shape matching"; + EditorGUILayout.PropertyField(shapeMatchingConstraintParameters, constraintLabelContent); + + constraintLabelContent.text = "Tether"; + EditorGUILayout.PropertyField(tetherConstraintParameters, constraintLabelContent); + + constraintLabelContent.text = "Pin"; + EditorGUILayout.PropertyField(pinConstraintParameters, constraintLabelContent); + + constraintLabelContent.text = "Stitch"; + EditorGUILayout.PropertyField(stitchConstraintParameters, constraintLabelContent); + + constraintLabelContent.text = "Density"; + EditorGUILayout.PropertyField(densityConstraintParameters, constraintLabelContent); + + constraintLabelContent.text = "Stretch & Shear"; + EditorGUILayout.PropertyField(stretchShearConstraintParameters, constraintLabelContent); + + constraintLabelContent.text = "Bend & Twist"; + EditorGUILayout.PropertyField(bendTwistConstraintParameters, constraintLabelContent); + + constraintLabelContent.text = "Chain"; + EditorGUILayout.PropertyField(chainConstraintParameters, constraintLabelContent); + } + 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(); + } + + } + + [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); + var bounds = solver.bounds; + Gizmos.DrawWireCube(bounds.center, bounds.size); + } + + } + + } +} + + diff --git a/xiaofang/Assets/Obi/Editor/Common/Solver/ObiSolverEditor.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Solver/ObiSolverEditor.cs.meta new file mode 100644 index 00000000..07e52a91 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Solver/ObiSolverEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d776094922a7647ccb5194d08e93ceaf +timeCreated: 1444024856 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Utils.meta b/xiaofang/Assets/Obi/Editor/Common/Utils.meta new file mode 100644 index 00000000..b0089603 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Utils.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b7a80ed0e578946aaad351df0313281a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Utils/BooleanPreference.cs b/xiaofang/Assets/Obi/Editor/Common/Utils/BooleanPreference.cs new file mode 100644 index 00000000..d74b8dc4 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Utils/BooleanPreference.cs @@ -0,0 +1,46 @@ + +using UnityEditor; + +namespace Obi +{ + public class BooleanPreference + { + bool m_Value; + string m_Name; + bool m_Loaded; + + public BooleanPreference(string name, bool value) + { + m_Name = name; + m_Loaded = false; + m_Value = value; + } + + private void Load() + { + if (m_Loaded) + return; + + m_Loaded = true; + m_Value = EditorPrefs.GetBool(m_Name, m_Value); + } + + public bool value + { + get { Load(); return m_Value; } + set + { + Load(); + if (m_Value == value) + return; + m_Value = value; + EditorPrefs.SetBool(m_Name, value); + } + } + + public static implicit operator bool(BooleanPreference s) + { + return s.value; + } + } +} diff --git a/xiaofang/Assets/Obi/Editor/Common/Utils/BooleanPreference.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Utils/BooleanPreference.cs.meta new file mode 100644 index 00000000..f74e188c --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Utils/BooleanPreference.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4af60554659c94226a5b3cf0b5987a5f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Utils/ObiEditorUtils.cs b/xiaofang/Assets/Obi/Editor/Common/Utils/ObiEditorUtils.cs new file mode 100644 index 00000000..be05d5a3 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Utils/ObiEditorUtils.cs @@ -0,0 +1,254 @@ +using System; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEditor; +using UnityEditor.SceneManagement; +using System.IO; +using UnityEngine.Rendering; + +namespace Obi{ + + public static class ObiEditorUtils + { + static GUIStyle separatorLine; + static GUIStyle toggleablePropertyGroup; + static GUIStyle boldToggle; + + public static GUIStyle GetSeparatorLineStyle() + { + if (separatorLine == null) + { + separatorLine = new GUIStyle(EditorGUIUtility.GetBuiltinSkin(EditorSkin.Scene).box); + separatorLine.normal.background = Resources.Load("SeparatorLine"); + separatorLine.border = new RectOffset(3, 3, 0, 0); + separatorLine.padding = new RectOffset(0, 0, 0, 0); + separatorLine.margin = new RectOffset(0, 0, 0, 0); + separatorLine.fixedHeight = 3; + separatorLine.stretchWidth = true; + } + return separatorLine; + } + + public static GUIStyle GetToggleablePropertyGroupStyle() + { + if (toggleablePropertyGroup == null) + { + toggleablePropertyGroup = new GUIStyle(); + toggleablePropertyGroup.normal.background = Resources.Load("ToggleableGroupBg"); + toggleablePropertyGroup.border = new RectOffset(3, 3, 3, 3); + toggleablePropertyGroup.padding = new RectOffset(0, 0, 0, 0); + toggleablePropertyGroup.margin = new RectOffset(0, 0, 3, 3); + } + return toggleablePropertyGroup; + } + + public static GUIStyle GetBoldToggleStyle() + { + if (boldToggle == null) + { + boldToggle = new GUIStyle(EditorStyles.toggle); + boldToggle.fontStyle = FontStyle.Bold; + } + return boldToggle; + } + + public static void SaveMesh (Mesh mesh, string title, string name, bool makeNewInstance = true, bool optimizeMesh = true) { + + string path = EditorUtility.SaveFilePanel(title, "Assets/", name, "asset"); + if (string.IsNullOrEmpty(path)) return; + + path = FileUtil.GetProjectRelativePath(path); + + Mesh meshToSave = (makeNewInstance) ? GameObject.Instantiate(mesh) as Mesh : mesh; + + if (optimizeMesh) + MeshUtility.Optimize(meshToSave); + + AssetDatabase.CreateAsset(meshToSave, path); + AssetDatabase.SaveAssets(); + } + + public static void PlaceActorRoot(GameObject element, MenuCommand menuCommand) + { + GameObject parent = menuCommand.context as GameObject; + + if (parent == null) + { + parent = GetOrCreateSolverObject(); + } + + if (parent.GetComponentsInParent(true).Length == 0) + { + // Create solver under context GameObject, + // and make that be the parent which actor is added under. + GameObject solver = CreateNewSolver(); + solver.transform.SetParent(parent.transform, false); + parent = solver; + } + + // The element needs to be already in its destination scene when the + // RegisterCreatedObjectUndo is performed; otherwise the scene it was created in is dirtied. + SceneManager.MoveGameObjectToScene(element, parent.scene); + + Undo.RegisterCreatedObjectUndo(element, "Create " + element.name); + + if (element.transform.parent == null) + Undo.SetTransformParent(element.transform, parent.transform, "Parent " + element.name); + + GameObjectUtility.EnsureUniqueNameForSibling(element); + + // We have to fix up the undo name since the name of the object was only known after reparenting it. + Undo.SetCurrentGroupName("Create " + element.name); + + GameObjectUtility.SetParentAndAlign(element, parent); + Selection.activeGameObject = element; + } + + // Helper function that returns a Solver GameObject; preferably a parent of the selection, or other existing Canvas. + private static GameObject GetOrCreateSolverObject() + { + GameObject selectedGo = Selection.activeGameObject; + + // Try to find a gameobject that is the selected GO or one if its parents. + ObiSolver solver = (selectedGo != null) ? selectedGo.GetComponentInParent() : null; + if (IsValidSolver(solver)) + return solver.gameObject; + + // No solver in selection or its parents? Then use any valid solver. + // We have to find all loaded solvers, not just the ones in main scenes. + ObiSolver[] solverArray = StageUtility.GetCurrentStageHandle().FindComponentsOfType(); + for (int i = 0; i < solverArray.Length; i++) + if (IsValidSolver(solverArray[i])) + return solverArray[i].gameObject; + + // No solver in the scene at all? Then create a new one. + return CreateNewSolver(); + } + + public static GameObject CreateNewSolver() + { + // Root for the actors. + var root = new GameObject("Obi Solver", typeof(ObiSolver)); + + // Works for all stages. + StageUtility.PlaceGameObjectInCurrentStage(root); + Undo.RegisterCreatedObjectUndo(root, "Create " + root.name); + + return root; + } + + static bool IsValidSolver(ObiSolver solver) + { + if (solver == null || !solver.gameObject.activeInHierarchy) + return false; + + if (EditorUtility.IsPersistent(solver) || (solver.hideFlags & HideFlags.HideInHierarchy) != 0) + return false; + + if (StageUtility.GetStageHandle(solver.gameObject) != StageUtility.GetCurrentStageHandle()) + return false; + + return true; + } + + public static void DoPropertyGroup(GUIContent content, System.Action action) + { + EditorGUILayout.BeginVertical(GetToggleablePropertyGroupStyle()); + { + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField(content, EditorStyles.boldLabel); + EditorGUILayout.EndHorizontal(); + + if (action != null) + { + EditorGUI.indentLevel++; + action(); + EditorGUI.indentLevel--; + } + } + EditorGUILayout.EndVertical(); + } + + public static void DoToggleablePropertyGroup(SerializedProperty enabledProperty, GUIContent content, System.Action action) + { + bool enabled = GUI.enabled; + GUI.enabled &= enabledProperty.boolValue; + EditorGUILayout.BeginVertical(GetToggleablePropertyGroupStyle()); + GUI.enabled = enabled; + { + EditorGUILayout.BeginHorizontal(); + enabledProperty.boolValue = EditorGUILayout.ToggleLeft(content,enabledProperty.boolValue,EditorStyles.boldLabel); + EditorGUILayout.EndHorizontal(); + + if (enabledProperty.boolValue && action != null) + { + EditorGUI.indentLevel++; + action(); + EditorGUI.indentLevel--; + } + } + EditorGUILayout.EndVertical(); + } + + public static int DoToolBar(int selected, GUIContent[] items) + { + // Keep the selected index within the bounds of the items array + selected = selected < 0 ? 0 : selected >= items.Length ? items.Length - 1 : selected; + + GUIStyle style = GUI.skin.FindStyle("Button"); + + EditorGUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + for (int i = 0; i < items.Length; i++) + { + if (i == 0 && items.Length > 1) + style = GUI.skin.FindStyle("ButtonLeft"); + else if (items.Length > 1 && i == items.Length-1) + style = GUI.skin.FindStyle("ButtonRight"); + else if (i > 0) + style = GUI.skin.FindStyle("ButtonMid"); + + + // Display toggle. Get if toggle changed. + bool change = GUILayout.Toggle(selected == i, items[i],style,GUILayout.Height(24)); + // If changed, set selected to current index. + if (change) + selected = i; + } + GUILayout.FlexibleSpace(); + EditorGUILayout.EndHorizontal(); + + // 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/xiaofang/Assets/Obi/Editor/Common/Utils/ObiEditorUtils.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Utils/ObiEditorUtils.cs.meta new file mode 100644 index 00000000..582e6640 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Utils/ObiEditorUtils.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 57c936f7a4f99456d944beed51c5b935 +timeCreated: 1452817402 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Utils/ObiFoamGeneratorEditor.cs b/xiaofang/Assets/Obi/Editor/Common/Utils/ObiFoamGeneratorEditor.cs new file mode 100644 index 00000000..42d4e21d --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Editor/Common/Utils/ObiFoamGeneratorEditor.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Utils/ObiFoamGeneratorEditor.cs.meta new file mode 100644 index 00000000..baab1807 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Utils/ObiFoamGeneratorEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b9656e2c54d9e4c478c74ca6d97428f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Utils/ObiParticleAttachmentEditor.cs b/xiaofang/Assets/Obi/Editor/Common/Utils/ObiParticleAttachmentEditor.cs new file mode 100644 index 00000000..1da9fd36 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Utils/ObiParticleAttachmentEditor.cs @@ -0,0 +1,121 @@ +using UnityEditor; +using UnityEditorInternal; +using UnityEngine; +using System.Collections.Generic; +using System.Linq; + + +namespace Obi +{ + + [CustomEditor(typeof(ObiParticleAttachment))] + public class ObiParticleAttachmentEditor : Editor + { + + SerializedProperty targetTransform; + SerializedProperty particleGroup; + SerializedProperty attachmentType; + SerializedProperty constrainOrientation; + SerializedProperty compliance; + SerializedProperty breakThreshold; + + ObiParticleAttachment attachment; + + public void OnEnable() + { + + attachment = target as ObiParticleAttachment; + targetTransform = serializedObject.FindProperty("m_Target"); + particleGroup = serializedObject.FindProperty("m_ParticleGroup"); + attachmentType = serializedObject.FindProperty("m_AttachmentType"); + constrainOrientation = serializedObject.FindProperty("m_ConstrainOrientation"); + compliance = serializedObject.FindProperty("m_Compliance"); + breakThreshold = serializedObject.FindProperty("m_BreakThreshold"); + } + + public override void OnInspectorGUI() + { + + serializedObject.UpdateIfRequiredOrScript(); + + // warn about incorrect setups: + if (!attachmentType.hasMultipleDifferentValues && !targetTransform.hasMultipleDifferentValues) + { + if (attachmentType.enumValueIndex == (int)ObiParticleAttachment.AttachmentType.Dynamic) + { + var targetValue = targetTransform.objectReferenceValue as UnityEngine.Component; + if (targetValue != null) + { + var collider = targetValue.GetComponent(); + if (collider == null) + { + EditorGUILayout.HelpBox("Dynamic attachments require the target object to have a ObiCollider component. Either add one, or change the attachment type to Static.", MessageType.Warning); + } + } + } + } + + 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) + { + var rect = EditorGUILayout.GetControlRect(); + var label = EditorGUI.BeginProperty(rect, new GUIContent("Particle group"), particleGroup); + rect = EditorGUI.PrefixLabel(rect, label); + + if (GUI.Button(rect, attachment.particleGroup != null ? attachment.particleGroup.name : "None", EditorStyles.popup)) + { + // create the menu and add items to it + GenericMenu menu = new GenericMenu(); + menu.allowDuplicateNames = true; + + for (int i = 0; i < blueprint.groups.Count; ++i) + { + menu.AddItem(new GUIContent(blueprint.groups[i].name), blueprint.groups[i] == attachment.particleGroup, OnParticleGroupSelected, blueprint.groups[i]); + } + + // display the menu + menu.DropDown(rect); + } + + EditorGUI.EndProperty(); + } + + EditorGUILayout.PropertyField(attachmentType, new GUIContent("Type")); + + if (attachment.actor.usesOrientedParticles) + EditorGUILayout.PropertyField(constrainOrientation, new GUIContent("Constraint Orientation")); + + if (attachment.attachmentType == ObiParticleAttachment.AttachmentType.Dynamic) + { + EditorGUILayout.PropertyField(compliance, new GUIContent("Compliance")); + EditorGUILayout.PropertyField(breakThreshold, new GUIContent("Break threshold")); + } + + if (GUI.changed) + serializedObject.ApplyModifiedProperties(); + + } + + // the GenericMenu.MenuFunction2 event handler for when a menu item is selected + void OnParticleGroupSelected(object index) + { + Undo.RecordObject(attachment, "Set particle group"); + attachment.particleGroup = index as ObiParticleGroup; + PrefabUtility.RecordPrefabInstancePropertyModifications(attachment); + } + } + +} + + diff --git a/xiaofang/Assets/Obi/Editor/Common/Utils/ObiParticleAttachmentEditor.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Utils/ObiParticleAttachmentEditor.cs.meta new file mode 100644 index 00000000..4d17dbba --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Utils/ObiParticleAttachmentEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1587d981fa96c4b2291e19484a5a5b13 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Utils/ObiRaycastHit.cs b/xiaofang/Assets/Obi/Editor/Common/Utils/ObiRaycastHit.cs new file mode 100644 index 00000000..d56e3277 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Utils/ObiRaycastHit.cs @@ -0,0 +1,26 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace Obi +{ + public class ObiRaycastHit + { + + /// Distance from the Raycast origin to the point of impact. + public float distance; + /// The position in model space where a raycast intercepted a triangle. + public Vector3 position; + /// The normal in model space of the triangle that this raycast hit. + public Vector3 normal; + /// The triangle index of the hit face. + public int triangle; + + public ObiRaycastHit(float distance, Vector3 position, Vector3 normal, int triangle) + { + this.distance = distance; + this.position = position; + this.normal = normal; + this.triangle = triangle; + } + } +} diff --git a/xiaofang/Assets/Obi/Editor/Common/Utils/ObiRaycastHit.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Utils/ObiRaycastHit.cs.meta new file mode 100644 index 00000000..27e33591 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Utils/ObiRaycastHit.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2eb47a91b4f7c4f4aa52d4b914caa96e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Common/Utils/PreviewHelpers.cs b/xiaofang/Assets/Obi/Editor/Common/Utils/PreviewHelpers.cs new file mode 100644 index 00000000..5ba601a9 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Utils/PreviewHelpers.cs @@ -0,0 +1,150 @@ +using System; +using UnityEditor; +using UnityEngine; + +namespace Obi{ + + class PreviewHelpers + { + + // Preview interaction related stuff: + static int sliderHash = "Slider".GetHashCode(); + public static Vector2 Drag2D(Vector2 scrollPosition, Rect position) + { + int controlID = GUIUtility.GetControlID(PreviewHelpers.sliderHash, FocusType.Passive); + Event current = Event.current; + switch (current.GetTypeForControl(controlID)) + { + case EventType.MouseDown: + if (position.Contains(current.mousePosition) && position.width > 50f) + { + GUIUtility.hotControl = controlID; + current.Use(); + EditorGUIUtility.SetWantsMouseJumping(1); + } + break; + case EventType.MouseUp: + if (GUIUtility.hotControl == controlID) + { + GUIUtility.hotControl = 0; + } + EditorGUIUtility.SetWantsMouseJumping(0); + break; + case EventType.MouseDrag: + if (GUIUtility.hotControl == controlID) + { + scrollPosition -= current.delta * (float)((!current.shift) ? 1 : 3) / Mathf.Min(position.width, position.height) * 140f; + scrollPosition.y = Mathf.Clamp(scrollPosition.y, -90f, 90f); + current.Use(); + GUI.changed = true; + } + break; + } + return scrollPosition; + } + + public Camera m_Camera; + public float m_CameraFieldOfView = 30f; + public Light[] m_Light = new Light[2]; + internal RenderTexture m_RenderTexture; + public PreviewHelpers() : this(false) + { + } + public PreviewHelpers(bool renderFullScene) + { + GameObject gameObject = EditorUtility.CreateGameObjectWithHideFlags("PreRenderCamera", HideFlags.HideAndDontSave, new Type[] + { + typeof(Camera) + }); + this.m_Camera = gameObject.GetComponent(); + this.m_Camera.fieldOfView = this.m_CameraFieldOfView; + this.m_Camera.cullingMask = 1 << 1; + this.m_Camera.enabled = false; + this.m_Camera.clearFlags = CameraClearFlags.SolidColor; + this.m_Camera.farClipPlane = 10f; + this.m_Camera.nearClipPlane = 1f; + this.m_Camera.backgroundColor = new Color(0.192156866f, 0.192156866f, 0.192156866f, 0); + this.m_Camera.renderingPath = RenderingPath.Forward; + this.m_Camera.useOcclusionCulling = false; + + for (int i = 0; i < 2; i++) + { + GameObject gameObject2 = EditorUtility.CreateGameObjectWithHideFlags("PreRenderLight", HideFlags.HideAndDontSave, new Type[] + { + typeof(Light) + }); + this.m_Light[i] = gameObject2.GetComponent(); + this.m_Light[i].type = LightType.Directional; + this.m_Light[i].intensity = 1f; + this.m_Light[i].enabled = false; + } + + this.m_Light[0].color = new Color(0.4f, 0.4f, 0.45f, 0f); + this.m_Light[1].transform.rotation = Quaternion.Euler(340f, 218f, 177f); + this.m_Light[1].color = new Color(0.4f, 0.4f, 0.45f, 0f) * 0.7f; + } + public void Cleanup() + { + if (this.m_Camera) + { + UnityEngine.Object.DestroyImmediate(this.m_Camera.gameObject, true); + } + if (this.m_RenderTexture) + { + UnityEngine.Object.DestroyImmediate(this.m_RenderTexture); + this.m_RenderTexture = null; + } + Light[] light = this.m_Light; + for (int i = 0; i < light.Length; i++) + { + Light light2 = light[i]; + if (light2) + { + UnityEngine.Object.DestroyImmediate(light2.gameObject, true); + } + } + } + + private void InitPreview(Rect r) + { + int num = (int)r.width; + int num2 = (int)r.height; + if (!this.m_RenderTexture || this.m_RenderTexture.width != num || this.m_RenderTexture.height != num2) + { + if (this.m_RenderTexture) + { + UnityEngine.Object.DestroyImmediate(this.m_RenderTexture); + this.m_RenderTexture = null; + } + float scaleFactor = this.GetScaleFactor((float)num, (float)num2); + this.m_RenderTexture = new RenderTexture((int)((float)num * scaleFactor), (int)((float)num2 * scaleFactor), 16); + this.m_RenderTexture.hideFlags = HideFlags.HideAndDontSave; + this.m_Camera.targetTexture = this.m_RenderTexture; + } + float num3 = (this.m_RenderTexture.width > 0) ? Mathf.Max(1f, (float)this.m_RenderTexture.height / (float)this.m_RenderTexture.width) : 1f; + this.m_Camera.fieldOfView = Mathf.Atan(num3 * Mathf.Tan(this.m_CameraFieldOfView * 0.5f * 0.0174532924f)) * 57.29578f * 2f; + + } + public float GetScaleFactor(float width, float height) + { + float a = Mathf.Max(Mathf.Min(width * 2f, 1024f), width) / width; + float b = Mathf.Max(Mathf.Min(height * 2f, 1024f), height) / height; + return Mathf.Min(a, b); + } + + public void BeginPreview(Rect r, GUIStyle previewBackground) + { + this.InitPreview(r); + if (previewBackground == null || previewBackground == GUIStyle.none) + { + return; + } + } + public Texture EndPreview() + { + m_Camera.Render(); + return this.m_RenderTexture; + } + + } +} diff --git a/xiaofang/Assets/Obi/Editor/Common/Utils/PreviewHelpers.cs.meta b/xiaofang/Assets/Obi/Editor/Common/Utils/PreviewHelpers.cs.meta new file mode 100644 index 00000000..8ff77efc --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Common/Utils/PreviewHelpers.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 886ef4783c97a4dac9034b48a6c94b6c +timeCreated: 1438171037 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Obi.Editor.asmdef b/xiaofang/Assets/Obi/Editor/Obi.Editor.asmdef new file mode 100644 index 00000000..3c97604a --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Obi.Editor.asmdef @@ -0,0 +1,33 @@ +{ + "name": "Obi.Editor", + "references": [ + "GUID:da7abd44cdeea48609605c1c2c9609c0" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [ + { + "name": "com.unity.collections", + "expression": "0.8.0-preview.5", + "define": "OBI_COLLECTIONS" + }, + { + "name": "com.unity.burst", + "expression": "1.2.3-verified", + "define": "OBI_BURST" + }, + { + "name": "com.unity.mathematics", + "expression": "1.0.1", + "define": "OBI_MATHEMATICS" + } + ], + "noEngineReferences": false +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Obi.Editor.asmdef.meta b/xiaofang/Assets/Obi/Editor/Obi.Editor.asmdef.meta new file mode 100644 index 00000000..770027d7 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Obi.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 180639cf42b5c450c8fdad7e31d2ec13 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/ObiParticleSelection.cs b/xiaofang/Assets/Obi/Editor/ObiParticleSelection.cs new file mode 100644 index 00000000..06f1bb9d --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/ObiParticleSelection.cs @@ -0,0 +1,186 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + + public static class ObiParticleSelection + { + + static int particleSelectorHash = "ObiParticleSelectorHash".GetHashCode(); + + static Vector2 startPos; + static Vector2 currentPos; + static bool dragging = false; + static Rect marquee; + + public static bool DoSelection(Vector3[] positions, + bool[] selectionStatus, + bool[] facingCamera) + { + + Matrix4x4 cachedMatrix = Handles.matrix; + + int controlID = GUIUtility.GetControlID(particleSelectorHash, FocusType.Passive); + int selectedParticleIndex = -1; + bool selectionStatusChanged = false; + + // select vertex on mouse click: + switch (Event.current.GetTypeForControl(controlID)) + { + + case EventType.MouseDown: + + if (Event.current.button != 0) break; + + startPos = Event.current.mousePosition; + marquee.Set(0, 0, 0, 0); + + // If the user is not pressing shift, clear 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; + } + + // Allow use of marquee selection + if (Event.current.modifiers == EventModifiers.None || (Event.current.modifiers & EventModifiers.Shift) != 0) + GUIUtility.hotControl = controlID; + + float minSqrDistance = System.Single.MaxValue; + + for (int i = 0; i < positions.Length; i++) + { + // skip not selectable particles: + //if (!facingCamera[i] && (selectBackfaces & ObiActorBlueprintEditor.ParticleCulling.Back) != 0) continue; + //if (facingCamera[i] && (selectBackfaces & ObiActorBlueprintEditor.ParticleCulling.Front) != 0) continue; + + // get particle position in gui space: + Vector2 pos = HandleUtility.WorldToGUIPoint(positions[i]); + + // get distance from mouse position to particle position: + float sqrDistance = Vector2.SqrMagnitude(startPos - pos); + + // check if this particle is closer to the cursor that any previously considered particle. + if (sqrDistance < 100 && sqrDistance < minSqrDistance) + { //magic number 100 = 10*10, where 10 is min distance in pixels to select a particle. + minSqrDistance = sqrDistance; + selectedParticleIndex = i; + } + + } + + if (selectedParticleIndex >= 0) + { // toggle particle selection status. + + selectionStatus[selectedParticleIndex] = !selectionStatus[selectedParticleIndex]; + selectionStatusChanged = true; + GUIUtility.hotControl = controlID; + Event.current.Use(); + + } + 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.MouseMove: + SceneView.RepaintAll(); + break; + + case EventType.MouseDrag: + + if (GUIUtility.hotControl == controlID) + { + + currentPos = Event.current.mousePosition; + if (!dragging && Vector2.Distance(startPos, currentPos) > 5) + { + dragging = true; + } + else + { + GUIUtility.hotControl = controlID; + Event.current.Use(); + } + + //update marquee rect: + float left = Mathf.Min(startPos.x, currentPos.x); + float right = Mathf.Max(startPos.x, currentPos.x); + float bottom = Mathf.Min(startPos.y, currentPos.y); + float top = Mathf.Max(startPos.y, currentPos.y); + + marquee = new Rect(left, bottom, right - left, top - bottom); + + } + + break; + + case EventType.MouseUp: + + if (GUIUtility.hotControl == controlID) + { + + dragging = false; + + for (int i = 0; i < positions.Length; i++) + { + + // skip not selectable particles: + //switch (selectBackfaces) + { + //case ObiActorBlueprintEditor.ParticleCulling.Back: if (!facingCamera[i]) continue; break; + //case ObiActorBlueprintEditor.ParticleCulling.Front: if (facingCamera[i]) continue; break; + } + + // get particle position in gui space: + Vector2 pos = HandleUtility.WorldToGUIPoint(positions[i]); + + if (pos.x > marquee.xMin && pos.x < marquee.xMax && pos.y > marquee.yMin && pos.y < marquee.yMax) + { + selectionStatus[i] = true; + selectionStatusChanged = true; + } + + } + + GUIUtility.hotControl = 0; + Event.current.Use(); + } + + break; + + case EventType.Repaint: + + Handles.matrix = Matrix4x4.identity; + + if (dragging) + { + GUISkin oldSkin = GUI.skin; + GUI.skin = EditorGUIUtility.GetBuiltinSkin(EditorSkin.Scene); + Handles.BeginGUI(); + GUI.Box(new Rect(marquee.xMin, marquee.yMin, marquee.width, marquee.height), ""); + Handles.EndGUI(); + GUI.skin = oldSkin; + } + + Handles.matrix = cachedMatrix; + + break; + + } + + return selectionStatusChanged; + } + + } +} + diff --git a/xiaofang/Assets/Obi/Editor/ObiParticleSelection.cs.meta b/xiaofang/Assets/Obi/Editor/ObiParticleSelection.cs.meta new file mode 100644 index 00000000..c877a037 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/ObiParticleSelection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7020925dabebf42b7915da74e58c3b5e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/ObiStitcherEditor.cs b/xiaofang/Assets/Obi/Editor/ObiStitcherEditor.cs new file mode 100644 index 00000000..0c4b395b --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/ObiStitcherEditor.cs @@ -0,0 +1,287 @@ +using UnityEditor; +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; + +namespace Obi{ + + /** + * Custom inspector for ObiStitcher component. + */ + + [CustomEditor(typeof(ObiStitcher))] + public class ObiStitcherEditor : Editor + { + + ObiStitcher stitcher; + static public bool editing = false; + + static public Vector3 sewingToolHandle1 = Vector3.zero; + static public Vector3 sewingToolHandle2 = Vector3.one; + + static public bool[] selectionStatus = new bool[0]; + + public void OnEnable(){ + stitcher = (ObiStitcher)target; + + // initialize sewing tool to sensible values: + if (stitcher.Actor1 != null && stitcher.Actor2 != null){ + sewingToolHandle1 = stitcher.Actor1.transform.position; + sewingToolHandle2 = stitcher.Actor2.transform.position; + } + } + + public override void OnInspectorGUI() { + + serializedObject.UpdateIfRequiredOrScript(); + + EditorGUI.BeginChangeCheck(); + ObiActor actor1 = EditorGUILayout.ObjectField("First actor",stitcher.Actor1, typeof(ObiActor),true) as ObiActor; + if (EditorGUI.EndChangeCheck()){ + Undo.RecordObject(stitcher, "Set first actor"); + stitcher.Actor1 = actor1; + if (actor1 != null) + sewingToolHandle1 = actor1.transform.position; + PrefabUtility.RecordPrefabInstancePropertyModifications(stitcher); + } + + EditorGUI.BeginChangeCheck(); + ObiActor actor2 = EditorGUILayout.ObjectField("Second actor",stitcher.Actor2, typeof(ObiActor),true) as ObiActor; + 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); + } + + EditorGUILayout.HelpBox("Stitch count: " + stitcher.StitchCount,MessageType.None); + + // edit mode: + GUI.enabled = stitcher.Actor1 != null && stitcher.Actor2 != null; + editing = GUILayout.Toggle(editing,"Edit","LargeButton"); + + if (editing){ + + // 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 + if (GUILayout.Button("Remove selected stitches")){ + + List removedStitches = new List(); + + for(int i = 0; i < selectionStatus.Length; ++i){ + if (selectionStatus[i]){ + removedStitches.Add(i); + selectionStatus[i] = false; + } + } + + if (removedStitches.Count > 0){ + + Undo.RecordObject(stitcher, "Remove stitches"); + + // Remove from last to first, to avoid throwing off subsequent indices: + foreach(int i in removedStitches.OrderByDescending(i => i)){ + stitcher.RemoveStitch(i); + } + PrefabUtility.RecordPrefabInstancePropertyModifications(stitcher); + } + } + + // Add stitch: + if (GUILayout.Button("Add Stitch")) + { + FindClosestParticles(out int particle1, out int particle2); + + if (particle1 >= 0 && particle2 >= 0) + { + Undo.RecordObject(stitcher, "Add stitch"); + stitcher.AddStitch(particle1, particle2); + PrefabUtility.RecordPrefabInstancePropertyModifications(stitcher); + } + } + } + GUI.enabled = true; + + // Apply changes to the serializedProperty + if (GUI.changed){ + + serializedObject.ApplyModifiedProperties(); + + //stitcher.PushDataToSolver(ParticleData.NONE); + + } + + } + + public void FindClosestParticles(out int particle1, out int particle2) + { + particle1 = -1; + particle2 = -1; + float minDistance = float.MaxValue; + + if (stitcher.Actor1 == null || stitcher.Actor2 == null) + return; + + 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.activeParticleCount;++i) + { + Vector3 pos = stitcher.Actor1.GetParticlePosition(stitcher.Actor1.solverIndices[i]); + pos = HandleUtility.WorldToGUIPointWithDepth(pos); + + float distance1 = (pos - handle1).sqrMagnitude; + float distance2 = (pos - handle2).sqrMagnitude; + if (distance1 < minDistance){ + minDistance = distance1; + particle1 = i; + } + if (distance2 < minDistance2){ + minDistance2 = distance2; + particle2 = i; + } + } + }else{ + + // find closest particle to each end of the sewing tool: + for (int i = 0; i < stitcher.Actor1.activeParticleCount; ++i) + { + Vector3 pos = stitcher.Actor1.GetParticlePosition(stitcher.Actor1.solverIndices[i]); + 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.activeParticleCount; ++i) + { + Vector3 pos = stitcher.Actor2.GetParticlePosition(stitcher.Actor2.solverIndices[i]); + pos = HandleUtility.WorldToGUIPointWithDepth(pos); + + float min = (pos - handle2).sqrMagnitude; + if (min < minDistance) + { + minDistance = min; + particle2 = i; + } + } + } + } + + 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)); + } + } + + /** + * Draws selected stitches in the scene view and allows their selection. + */ + public void OnSceneGUI(){ + + Array.Resize(ref selectionStatus,stitcher.StitchCount); + + if (!editing) + return; + + DrawSewingTool(); + + if (stitcher.Actor1 != null && stitcher.Actor2 != null){ + + int controlID = GUIUtility.GetControlID("stitcher".GetHashCode(),FocusType.Passive); + float distanceToClosest = float.MaxValue; + int selectedIndex = -1; + int i = 0; + + foreach(ObiStitcher.Stitch stitch in stitcher.Stitches){ + + Vector3 pos1 = stitcher.Actor1.GetParticlePosition(stitcher.Actor1.solverIndices[stitch.particleIndex1]); + Vector3 pos2 = stitcher.Actor2.GetParticlePosition(stitcher.Actor2.solverIndices[stitch.particleIndex2]); + + switch (Event.current.GetTypeForControl(controlID)){ + case EventType.MouseDown: + + if (Event.current.button != 0) break; + + // If the user is pressing shift, accumulate selection. + if ((Event.current.modifiers & EventModifiers.Shift) == 0 && (Event.current.modifiers & EventModifiers.Alt) == 0){ + for(int j = 0; j < selectionStatus.Length; j++) + selectionStatus[j] = false; + } + + float distance = HandleUtility.DistanceToLine(pos1,pos2); + if (distance < 10 && distance < distanceToClosest){ + + distanceToClosest = distance; + selectedIndex = i; + + // Prevent deselection if we have selected a stitch: + GUIUtility.hotControl = controlID; + Event.current.Use(); + + } + break; + case EventType.Repaint: + Handles.color = selectionStatus[i]?Color.red:Color.cyan; + Handles.DrawDottedLine(pos1,pos2,2); + break; + } + ++i; + } + + if (selectedIndex >= 0){ + selectionStatus[selectedIndex] = !selectionStatus[selectedIndex]; + } + + } + + } + + } +} + diff --git a/xiaofang/Assets/Obi/Editor/ObiStitcherEditor.cs.meta b/xiaofang/Assets/Obi/Editor/ObiStitcherEditor.cs.meta new file mode 100644 index 00000000..b0c18e2e --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/ObiStitcherEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7d360f36068814e1a9e2835455e6be61 +timeCreated: 1489407253 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources.meta b/xiaofang/Assets/Obi/Editor/Resources.meta new file mode 100644 index 00000000..2f133580 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a89eef02b8abc42e2b56e6150832233d +folderAsset: yes +timeCreated: 1498032496 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/AddControlPoint.psd b/xiaofang/Assets/Obi/Editor/Resources/AddControlPoint.psd new file mode 100644 index 00000000..d968222e Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/AddControlPoint.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/AddControlPoint.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/AddControlPoint.psd.meta new file mode 100644 index 00000000..5dbc5521 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/AddControlPoint.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: 6d2b606052e73408595395e402a926e1 +timeCreated: 1478799645 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/AddIcon.psd b/xiaofang/Assets/Obi/Editor/Resources/AddIcon.psd new file mode 100644 index 00000000..b4142a48 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/AddIcon.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/AddIcon.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/AddIcon.psd.meta new file mode 100644 index 00000000..4ac9b4ed --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/AddIcon.psd.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: d11f3f1468cd5453d961042f3ae9799d +timeCreated: 1440144040 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/AddTetherButton.psd b/xiaofang/Assets/Obi/Editor/Resources/AddTetherButton.psd new file mode 100644 index 00000000..f0f2cd2a Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/AddTetherButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/AddTetherButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/AddTetherButton.psd.meta new file mode 100644 index 00000000..9cf24278 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/AddTetherButton.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: c8a8952cc5f5744e88c765ee83f6a865 +timeCreated: 1478799531 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/BackfacesButton.psd b/xiaofang/Assets/Obi/Editor/Resources/BackfacesButton.psd new file mode 100644 index 00000000..325bbf2e Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/BackfacesButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/BackfacesButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/BackfacesButton.psd.meta new file mode 100644 index 00000000..9e88b668 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/BackfacesButton.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: 6463b09cd29e543a49c1e2ea87b121f3 +timeCreated: 1478799645 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/BranchButton.png b/xiaofang/Assets/Obi/Editor/Resources/BranchButton.png new file mode 100644 index 00000000..c389a973 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/BranchButton.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/BranchButton.png.meta b/xiaofang/Assets/Obi/Editor/Resources/BranchButton.png.meta new file mode 100644 index 00000000..6a4866bc --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/BranchButton.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 4bb29d51ae50c4ee4acac3acc8c0cb18 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + 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 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/BrushHandle.psd b/xiaofang/Assets/Obi/Editor/Resources/BrushHandle.psd new file mode 100644 index 00000000..43cd79c0 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/BrushHandle.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/BrushHandle.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/BrushHandle.psd.meta new file mode 100644 index 00000000..812e50ad --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/BrushHandle.psd.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 5cbb736fc86b64409b40fe7050933899 +timeCreated: 1441952145 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/BrushIcon.psd b/xiaofang/Assets/Obi/Editor/Resources/BrushIcon.psd new file mode 100644 index 00000000..b3bbf8bd Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/BrushIcon.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/BrushIcon.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/BrushIcon.psd.meta new file mode 100644 index 00000000..aa215c88 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/BrushIcon.psd.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 652e8f881c4764ec9a7705aac5ed0e84 +timeCreated: 1442227627 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/ClearButton.psd b/xiaofang/Assets/Obi/Editor/Resources/ClearButton.psd new file mode 100644 index 00000000..fca2599f Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/ClearButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/ClearButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/ClearButton.psd.meta new file mode 100644 index 00000000..ec97fbfb --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/ClearButton.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: e6e3e5775eebd49e6aee6abb8470baa9 +timeCreated: 1478799645 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/ClearTethersButton.psd b/xiaofang/Assets/Obi/Editor/Resources/ClearTethersButton.psd new file mode 100644 index 00000000..12467dd8 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/ClearTethersButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/ClearTethersButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/ClearTethersButton.psd.meta new file mode 100644 index 00000000..b06e21fb --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/ClearTethersButton.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: 0458bb2ee7da84bf6b990ed5679e8e22 +timeCreated: 1478799645 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/DistanceFieldPreview.mat b/xiaofang/Assets/Obi/Editor/Resources/DistanceFieldPreview.mat new file mode 100644 index 00000000..a3f31843 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/DistanceFieldPreview.mat @@ -0,0 +1,87 @@ +%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: DistanceFieldPreview + m_Shader: {fileID: 4800000, guid: f667dd333ac88440587339a2a1ac0027, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Volume: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _Absorption: 2 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Glossiness: 0.5 + - _MaxSteps: 300 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SrcBlend: 1 + - _StepSize: 0.01 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _AABBMax: {r: 0.4081963, g: 0.4081963, b: 0.4081963, a: 0} + - _AABBMin: {r: -0.4081963, g: -0.4081963, b: -0.4081963, 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: [] diff --git a/xiaofang/Assets/Obi/Editor/Resources/DistanceFieldPreview.mat.meta b/xiaofang/Assets/Obi/Editor/Resources/DistanceFieldPreview.mat.meta new file mode 100644 index 00000000..0e5f4b00 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/DistanceFieldPreview.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5dde1f45f471c48a1a13fc4b8c0b5b43 +timeCreated: 1438180916 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/DistanceFieldPreview.shader b/xiaofang/Assets/Obi/Editor/Resources/DistanceFieldPreview.shader new file mode 100644 index 00000000..5b6de21f --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/DistanceFieldPreview.shader @@ -0,0 +1,121 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject' + + +Shader "Obi/Distance Field Preview" { + Properties { + _Volume ("Texture", 3D) = "" {} + _AABBMin("AABB Min",Vector) = (-0.5,-0.5,-0.5) + _AABBMax("AABB Max",Vector) = (0.5,0.5,0.5) + _InsideColor("Inside color",Color) = (1,1,1,1) + _OutsideColor("Outside color",Color) = (0,0,0,1) + _Absorption("Absorption",Float) = 1.5 + _StepSize("Step size",Float) = 0.01 + _MaxSteps("Max steps",Int) = 300 + } + SubShader { + Pass { + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma exclude_renderers flash gles + + #include "UnityCG.cginc" + + struct vs_input { + float4 vertex : POSITION; + }; + + struct ps_input { + float4 pos : SV_POSITION; + float3 eyeOrigin : TEXCOORD0; + float3 eyeDir : TEXCOORD1; + }; + + + ps_input vert (vs_input v) + { + ps_input o; + o.pos = UnityObjectToClipPos (v.vertex); + + o.eyeOrigin = mul((float3x3)unity_WorldToObject, _WorldSpaceCameraPos); // object space eye origin + o.eyeDir = -ObjSpaceViewDir(v.vertex); // object space eye direction + return o; + } + + sampler3D _Volume; + float3 _AABBMin; + float3 _AABBMax; + float _Absorption; + float _StepSize; + int _MaxSteps; + half4 _InsideColor; + half4 _OutsideColor; + + bool IntersectBox(float3 rayOrigin, float3 rayDir, float3 aabbMin, float3 aabbMax, out float t0, out float t1) + { + float3 invR = 1.0 / rayDir; + float3 tbot = invR * (aabbMin-rayOrigin); + float3 ttop = invR * (aabbMax-rayOrigin); + float3 tmin = min(ttop, tbot); + float3 tmax = max(ttop, tbot); + float2 t = max(tmin.xx, tmin.yz); + t0 = max(t.x, t.y); + t = min(tmax.xx, tmax.yz); + t1 = min(t.x, t.y); + return t0 <= t1; + } + + + float4 frag (ps_input input) : COLOR + { + float4 dst = float4(0.0, 0.0, 0.0, 0.0); + + // Calculate ray direction + float3 eyeDirection = normalize(input.eyeDir); + + //Calculate intersection with bounding box: + float tnear, tfar; + if (IntersectBox(input.eyeOrigin,eyeDirection,_AABBMin,_AABBMax,tnear,tfar)){ + if (tnear < 0.0) tnear = 0.0; + + //Calculate ray start and stop positions: + float3 rayStart = input.eyeOrigin + eyeDirection * tnear; + float3 rayStop = input.eyeOrigin + eyeDirection * tfar; + + // Transform from object space bounds to texture coordinate space: + float3 aabbSize = _AABBMax-_AABBMin; + rayStart = (rayStart-_AABBMin) / aabbSize; + rayStop = (rayStop-_AABBMin) / aabbSize; + + // Raytrace: + float3 pos = rayStart; + float3 step = normalize(rayStop-rayStart) * _StepSize; + float travel = distance(rayStop,rayStart); + + for (int i=0; i < _MaxSteps && travel > 0.0; ++i, pos += step, travel -= _StepSize) { + + float value = tex3Dlod(_Volume, float4(pos,0)).a; + float4 color; + if (value > 0.5){ //outside the surface. + color = _OutsideColor * (1 - value) * 2; + }else{ //inside the surface. + color = _InsideColor * value * 2; + } + dst += color * _StepSize * _Absorption; + + } + } + + return dst; + } + + ENDCG + + } + } + + Fallback "VertexLit" +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Resources/DistanceFieldPreview.shader.meta b/xiaofang/Assets/Obi/Editor/Resources/DistanceFieldPreview.shader.meta new file mode 100644 index 00000000..84621625 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/DistanceFieldPreview.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f667dd333ac88440587339a2a1ac0027 +timeCreated: 1438180827 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/EditCurves.psd b/xiaofang/Assets/Obi/Editor/Resources/EditCurves.psd new file mode 100644 index 00000000..2a82cde4 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/EditCurves.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/EditCurves.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/EditCurves.psd.meta new file mode 100644 index 00000000..e2d48498 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/EditCurves.psd.meta @@ -0,0 +1,116 @@ +fileFormatVersion: 2 +guid: 5de08540b1d0e4ed9b02351ecf5fb429 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 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 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 1 + pSDShowRemoveMatteOption: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/EditParticles.psd b/xiaofang/Assets/Obi/Editor/Resources/EditParticles.psd new file mode 100644 index 00000000..14a51cef Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/EditParticles.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/EditParticles.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/EditParticles.psd.meta new file mode 100644 index 00000000..f5ed7282 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/EditParticles.psd.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 8ec838b6f6b4a49c5b127c7342c6657b +timeCreated: 1450429847 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/EditorLineShader.shader b/xiaofang/Assets/Obi/Editor/Resources/EditorLineShader.shader new file mode 100644 index 00000000..d44991f8 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/EditorLineShader.shader @@ -0,0 +1,17 @@ +Shader "Obi/EditorLines" +{ + SubShader + { + Pass + { + Blend SrcAlpha OneMinusSrcAlpha + Cull Off + ZTest Always + Fog { Mode Off } + BindChannels + { + Bind "vertex", vertex Bind "color", color + } + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/Resources/EditorLineShader.shader.meta b/xiaofang/Assets/Obi/Editor/Resources/EditorLineShader.shader.meta new file mode 100644 index 00000000..f880ee9a --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/EditorLineShader.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 80a01a94e9fdb445a9e6dff54db02fa9 +timeCreated: 1470908721 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/EditorLines.mat b/xiaofang/Assets/Obi/Editor/Resources/EditorLines.mat new file mode 100644 index 00000000..22d38a1f --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/EditorLines.mat @@ -0,0 +1,81 @@ +%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: EditorLines + m_Shader: {fileID: 4800000, guid: 80a01a94e9fdb445a9e6dff54db02fa9, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: + - _EMISSION + m_LightmapFlags: 1 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Editor/Resources/EditorLines.mat.meta b/xiaofang/Assets/Obi/Editor/Resources/EditorLines.mat.meta new file mode 100644 index 00000000..a4190037 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/EditorLines.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f3999384313644fe3b9ba16589efe636 +timeCreated: 1470908872 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/EditorParticle.mat b/xiaofang/Assets/Obi/Editor/Resources/EditorParticle.mat new file mode 100644 index 00000000..15f5c248 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/EditorParticle.mat @@ -0,0 +1,76 @@ +%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: EditorParticle + m_Shader: {fileID: 4800000, guid: a16859f14873144e2b41f2bd03a84bbc, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 7e271617753294f4aaf5d79862c5d182, 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: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Glossiness: 0.5 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Editor/Resources/EditorParticle.mat.meta b/xiaofang/Assets/Obi/Editor/Resources/EditorParticle.mat.meta new file mode 100644 index 00000000..c04a6220 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/EditorParticle.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8c668cf76c548481c80404cce80ab834 +timeCreated: 1445287098 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/EditorParticle.shader b/xiaofang/Assets/Obi/Editor/Resources/EditorParticle.shader new file mode 100644 index 00000000..214d6e40 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/EditorParticle.shader @@ -0,0 +1,60 @@ +Shader "Obi/EditorPoint" +{ + SubShader + { + Blend One OneMinusSrcAlpha + ZWrite Off + ZTest always + Cull Back + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float3 corner : NORMAL; + fixed4 color : COLOR; + float4 t0 : TEXCOORD0; // ellipsoid t1 vector + }; + + struct v2f + { + float4 pos : SV_POSITION; + fixed4 color : COLOR; + float2 texcoord : TEXCOORD0; + }; + + v2f vert (appdata v) + { + v2f o; + + // particle positions are passed in world space, no need to use modelview matrix, just view. + float radius = v.t0.w * distance(mul(unity_ObjectToWorld, v.vertex), _WorldSpaceCameraPos); + 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, v.corner.y*0.5, radius); + o.color = v.color; + + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + // antialiased circle: + float dist = length(i.texcoord); + float pwidth = fwidth(dist); + float alpha = i.color.a * saturate((0.5 - dist) / pwidth); + + return fixed4(i.color.rgb * alpha, alpha); + } + ENDCG + } + } +} diff --git a/xiaofang/Assets/Obi/Editor/Resources/EditorParticle.shader.meta b/xiaofang/Assets/Obi/Editor/Resources/EditorParticle.shader.meta new file mode 100644 index 00000000..3dd4ff7c --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/EditorParticle.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a16859f14873144e2b41f2bd03a84bbc +timeCreated: 1445287084 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/EditorParticleShader.shader b/xiaofang/Assets/Obi/Editor/Resources/EditorParticleShader.shader new file mode 100644 index 00000000..649a3088 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/EditorParticleShader.shader @@ -0,0 +1,118 @@ +Shader "Obi/EditorParticles" { + + Properties { + _Color ("Particle color", Color) = (1,1,1,1) + _RadiusScale("Radius scale",float) = 1 + } + + SubShader { + + Pass { + + Name "EditorParticle" + Tags {"Queue"="Geometry" "IgnoreProjector"="True" "RenderType"="Opaque"} + Blend SrcAlpha OneMinusSrcAlpha + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma fragmentoption ARB_precision_hint_fastest + + #include "../../Resources/ObiMaterials/Common/ObiEllipsoids.cginc" + #include "../../Resources/ObiMaterials/Common/ObiUtils.cginc" + + 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 + { + float4 pos : SV_POSITION; + fixed4 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, float3(0.5f,0.5f,0.5f)); + + 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 + float3 modelUp = mul (UNITY_MATRIX_IT_MV,float3(0,1,0)); + float vecHemi = dot(n, modelUp) * 0.5f + 0.5f; + half3 amb = 0.6f * lerp(float3(0.5f,0.48f,0.45f), float3(0.8f,0.9f,1), vecHemi); + + // simple lighting: diffuse + float ndotl = saturate( dot( n, normalize(i.lightDir) ) ); + + // final lit color: + fo.color.rgb = i.color * (0.5f * ndotl + 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 + + } + + } +FallBack "Diffuse" +} + diff --git a/xiaofang/Assets/Obi/Editor/Resources/EditorParticleShader.shader.meta b/xiaofang/Assets/Obi/Editor/Resources/EditorParticleShader.shader.meta new file mode 100644 index 00000000..7e76c5af --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/EditorParticleShader.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f909e74f185674832ad45806b9c6e60f +timeCreated: 1438934781 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/FillButton.psd b/xiaofang/Assets/Obi/Editor/Resources/FillButton.psd new file mode 100644 index 00000000..ee57c7ba Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/FillButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/FillButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/FillButton.psd.meta new file mode 100644 index 00000000..70102da7 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/FillButton.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: 5aa30f0cf5bab4c7dab839a28bd5a3b8 +timeCreated: 1478802054 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/FrontfacesButton.psd b/xiaofang/Assets/Obi/Editor/Resources/FrontfacesButton.psd new file mode 100644 index 00000000..39119469 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/FrontfacesButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/FrontfacesButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/FrontfacesButton.psd.meta new file mode 100644 index 00000000..188af017 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/FrontfacesButton.psd.meta @@ -0,0 +1,95 @@ +fileFormatVersion: 2 +guid: 5f827adfcd494429faa0357b10a2b866 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/GaussianButton.psd b/xiaofang/Assets/Obi/Editor/Resources/GaussianButton.psd new file mode 100644 index 00000000..42afd425 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/GaussianButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/GaussianButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/GaussianButton.psd.meta new file mode 100644 index 00000000..8d580bc4 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/GaussianButton.psd.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 23303a76d97ac4435b47284e747a1e8f +timeCreated: 1442227197 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/HandleButton.psd b/xiaofang/Assets/Obi/Editor/Resources/HandleButton.psd new file mode 100644 index 00000000..3b65a0f9 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/HandleButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/HandleButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/HandleButton.psd.meta new file mode 100644 index 00000000..a6a59584 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/HandleButton.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: 25ef265869b174c41bd35bcb371e0fa9 +timeCreated: 1478802054 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons.meta new file mode 100644 index 00000000..3382ebe4 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 292753011b5614e38934aacb2697fd86 +folderAsset: yes +timeCreated: 1482921919 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiActorBlueprint Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiActorBlueprint Icon.png new file mode 100644 index 00000000..850ee5f4 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiActorBlueprint Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiActorBlueprint Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiActorBlueprint Icon.png.meta new file mode 100644 index 00000000..0e77ce1c --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiActorBlueprint Icon.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: d0123218ec6144d0983c099fc7339924 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + 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 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiAerodynamicConstraints Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiAerodynamicConstraints Icon.png new file mode 100644 index 00000000..ae0f69a0 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiAerodynamicConstraints Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiAerodynamicConstraints Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiAerodynamicConstraints Icon.png.meta new file mode 100644 index 00000000..fa9e5e66 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiAerodynamicConstraints Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 8626b43f419d1466a9dc1c1509308b13 +timeCreated: 1448330601 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiBendConstraints Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiBendConstraints Icon.png new file mode 100644 index 00000000..a07cacc4 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiBendConstraints Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiBendConstraints Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiBendConstraints Icon.png.meta new file mode 100644 index 00000000..0fd78b8c --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiBendConstraints Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: f9aac3aba3ca7456d807e7fab120eb8a +timeCreated: 1448835892 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiBendTwistConstraints Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiBendTwistConstraints Icon.png new file mode 100644 index 00000000..63cbd004 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiBendTwistConstraints Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiBendTwistConstraints Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiBendTwistConstraints Icon.png.meta new file mode 100644 index 00000000..a3012cd3 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiBendTwistConstraints Icon.png.meta @@ -0,0 +1,95 @@ +fileFormatVersion: 2 +guid: 91de8d14a7b7a42d88d336323c428b20 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiBone Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiBone Icon.png new file mode 100644 index 00000000..6ddf89c7 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiBone Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiBone Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiBone Icon.png.meta new file mode 100644 index 00000000..9ec7609e --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiBone Icon.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 0a18e0376cc184a9b96ebb3bf0175cc2 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiChainConstraints Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiChainConstraints Icon.png new file mode 100644 index 00000000..a07d2cd3 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiChainConstraints Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiChainConstraints Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiChainConstraints Icon.png.meta new file mode 100644 index 00000000..1596bcb0 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiChainConstraints Icon.png.meta @@ -0,0 +1,95 @@ +fileFormatVersion: 2 +guid: 1a42905220c3544c99b3ec98f88b080b +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCloth Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCloth Icon.png new file mode 100644 index 00000000..5c4c59c8 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCloth Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCloth Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCloth Icon.png.meta new file mode 100644 index 00000000..c6f8494a --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCloth Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 3970b32a4b80e4a9290b7ac8a8cf2619 +timeCreated: 1502052646 +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: -3 + 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: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: iPhone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Android + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiClothRenderer Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiClothRenderer Icon.png new file mode 100644 index 00000000..ce6b6bd9 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiClothRenderer Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiClothRenderer Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiClothRenderer Icon.png.meta new file mode 100644 index 00000000..b6a8abd8 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiClothRenderer Icon.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 503f012f470234e44952b01da62590d2 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCollider Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCollider Icon.png new file mode 100644 index 00000000..d769edbd Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCollider Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCollider Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCollider Icon.png.meta new file mode 100644 index 00000000..dbadf1f9 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCollider Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 6da22d6bce08a4f3d86542bb903de689 +timeCreated: 1502054757 +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: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCollider2D Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCollider2D Icon.png new file mode 100644 index 00000000..e08dcb4f Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCollider2D Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCollider2D Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCollider2D Icon.png.meta new file mode 100644 index 00000000..8e7ac34d --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCollider2D Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: e7185d0557058412db2fc499de3a0739 +timeCreated: 1503509205 +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: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCollisionMaterial Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCollisionMaterial Icon.png new file mode 100644 index 00000000..87f71401 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCollisionMaterial Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCollisionMaterial Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCollisionMaterial Icon.png.meta new file mode 100644 index 00000000..56997412 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCollisionMaterial Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: e101664ae1c454916896aaaa3199221c +timeCreated: 1450304914 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCurve Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCurve Icon.png new file mode 100644 index 00000000..00ebdb8a Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCurve Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCurve Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCurve Icon.png.meta new file mode 100644 index 00000000..c0a6c7cb --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiCurve Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: ed34a2f317b874412ad24d7bab730ad5 +timeCreated: 1466751256 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiDistanceConstraints Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiDistanceConstraints Icon.png new file mode 100644 index 00000000..2ab4ac8b Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiDistanceConstraints Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiDistanceConstraints Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiDistanceConstraints Icon.png.meta new file mode 100644 index 00000000..7194cc7c --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiDistanceConstraints Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 8be685232a6ad41508d8bbe9d003a892 +timeCreated: 1447902275 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiDistanceField Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiDistanceField Icon.png new file mode 100644 index 00000000..b3f52ee6 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiDistanceField Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiDistanceField Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiDistanceField Icon.png.meta new file mode 100644 index 00000000..fb4c6b08 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiDistanceField Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: a83ed40096e3a40efa85f35b091e6298 +timeCreated: 1516041722 +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: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiDistanceFieldRenderer Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiDistanceFieldRenderer Icon.png new file mode 100644 index 00000000..d5c420db Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiDistanceFieldRenderer Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiDistanceFieldRenderer Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiDistanceFieldRenderer Icon.png.meta new file mode 100644 index 00000000..13797368 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiDistanceFieldRenderer Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 41cb9d55de5b24458b45e5465606249a +timeCreated: 1516041845 +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: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitter Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitter Icon.png new file mode 100644 index 00000000..51b410b3 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitter Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitter Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitter Icon.png.meta new file mode 100644 index 00000000..52988e56 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitter Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: d1048d188bf4d4e32ac7395da95aedd4 +timeCreated: 1466752717 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialFluid Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialFluid Icon.png new file mode 100644 index 00000000..6a8ebdff Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialFluid Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialFluid Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialFluid Icon.png.meta new file mode 100644 index 00000000..81bcc569 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialFluid Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: ea94643102f314a62a9fab85aaf9c559 +timeCreated: 1487699460 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialGranular Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialGranular Icon.png new file mode 100644 index 00000000..38f11f20 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialGranular Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialGranular Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialGranular Icon.png.meta new file mode 100644 index 00000000..6a243bbe --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialGranular Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 7cf34d3db0e2e4a009f29fe06a4240d4 +timeCreated: 1487699330 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeCube Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeCube Icon.png new file mode 100644 index 00000000..0f82ff7b Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeCube Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeCube Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeCube Icon.png.meta new file mode 100644 index 00000000..4b084eff --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeCube Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 8723f934b6ce94aa698b20cae91c61bd +timeCreated: 1465712532 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeDisk Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeDisk Icon.png new file mode 100644 index 00000000..4ab4dbc1 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeDisk Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeDisk Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeDisk Icon.png.meta new file mode 100644 index 00000000..e9789518 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeDisk Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 84f2a1eb2e3bf40edbbfa365ba480de5 +timeCreated: 1465712532 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeEdge Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeEdge Icon.png new file mode 100644 index 00000000..520c263c Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeEdge Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeEdge Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeEdge Icon.png.meta new file mode 100644 index 00000000..382e0513 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeEdge Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 42373f4f9c4d04bc18125f69cf225dc0 +timeCreated: 1465712532 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeMesh Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeMesh Icon.png new file mode 100644 index 00000000..bb1366c0 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeMesh Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeMesh Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeMesh Icon.png.meta new file mode 100644 index 00000000..87b74639 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeMesh Icon.png.meta @@ -0,0 +1,128 @@ +fileFormatVersion: 2 +guid: aadcf43cc18b74da587fc0fbe4fc019a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSphere Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSphere Icon.png new file mode 100644 index 00000000..29aac3f7 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSphere Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSphere Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSphere Icon.png.meta new file mode 100644 index 00000000..28402b89 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSphere Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 882466012f5c44b69b035a407aa63e16 +timeCreated: 1465712839 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSquare Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSquare Icon.png new file mode 100644 index 00000000..6f60ed85 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSquare Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSquare Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSquare Icon.png.meta new file mode 100644 index 00000000..767c5504 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSquare Icon.png.meta @@ -0,0 +1,100 @@ +fileFormatVersion: 2 +guid: 775a8b8dbdc9a4bb9b5e06b22255ab80 +timeCreated: 1490861263 +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 + - buildTarget: WebGL + 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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiFluidRenderer Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiFluidRenderer Icon.png new file mode 100644 index 00000000..8bbace70 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiFluidRenderer Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiFluidRenderer Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiFluidRenderer Icon.png.meta new file mode 100644 index 00000000..5699caa0 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiFluidRenderer Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: d1aaaa02ae8dd4da2a59227f5e4a3689 +timeCreated: 1487699364 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiFoamGenerator Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiFoamGenerator Icon.png new file mode 100644 index 00000000..4a6c6a69 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiFoamGenerator Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiFoamGenerator Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiFoamGenerator Icon.png.meta new file mode 100644 index 00000000..9e912296 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiFoamGenerator Icon.png.meta @@ -0,0 +1,122 @@ +fileFormatVersion: 2 +guid: b7cec6e680e3a479ca03a89eccd4e052 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: 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: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiForceZone Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiForceZone Icon.png new file mode 100644 index 00000000..f8ffcb82 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiForceZone Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiForceZone Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiForceZone Icon.png.meta new file mode 100644 index 00000000..0790eb99 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiForceZone Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: d7b67d3b64785476bb7520aa3190fee3 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiMeshTopology Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiMeshTopology Icon.png new file mode 100644 index 00000000..7926bff2 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiMeshTopology Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiMeshTopology Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiMeshTopology Icon.png.meta new file mode 100644 index 00000000..95d97f43 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiMeshTopology Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 8e5266f7a0df04a17a5505a19aa2d4d1 +timeCreated: 1452221150 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiParticleHandle Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiParticleHandle Icon.png new file mode 100644 index 00000000..e50bb19e Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiParticleHandle Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiParticleHandle Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiParticleHandle Icon.png.meta new file mode 100644 index 00000000..f6ce7de1 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiParticleHandle Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 528d201bc10084452b24974deb16a423 +timeCreated: 1464049002 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiParticlePicker Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiParticlePicker Icon.png new file mode 100644 index 00000000..75f706cf Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiParticlePicker Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiParticlePicker Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiParticlePicker Icon.png.meta new file mode 100644 index 00000000..0c23c24f --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiParticlePicker Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 0f9d020f7c659443a93327a34ede18b4 +timeCreated: 1484584318 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiParticleRenderer Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiParticleRenderer Icon.png new file mode 100644 index 00000000..b234cb10 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiParticleRenderer Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiParticleRenderer Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiParticleRenderer Icon.png.meta new file mode 100644 index 00000000..743e09c4 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiParticleRenderer Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: f424a87c9f03240c2870a664731ac9aa +timeCreated: 1447901223 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiPathSmoother Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiPathSmoother Icon.png new file mode 100644 index 00000000..939d3209 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiPathSmoother Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiPathSmoother Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiPathSmoother Icon.png.meta new file mode 100644 index 00000000..61b9afb8 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiPathSmoother Icon.png.meta @@ -0,0 +1,122 @@ +fileFormatVersion: 2 +guid: 8791eecf125744cbeadea65319c29d5a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: 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: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiPinConstraints Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiPinConstraints Icon.png new file mode 100644 index 00000000..81eb89c6 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiPinConstraints Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiPinConstraints Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiPinConstraints Icon.png.meta new file mode 100644 index 00000000..2861a1fb --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiPinConstraints Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 85e4f507907784b9eb4637afe5c2e3a4 +timeCreated: 1450305437 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiPlant Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiPlant Icon.png new file mode 100644 index 00000000..bfa508a5 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiPlant Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiPlant Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiPlant Icon.png.meta new file mode 100644 index 00000000..3522620f --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiPlant Icon.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 0edcf127e08404f979b63884bc2c0173 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + 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 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiProfiler Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiProfiler Icon.png new file mode 100644 index 00000000..9bc5433f Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiProfiler Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiProfiler Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiProfiler Icon.png.meta new file mode 100644 index 00000000..f4157015 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiProfiler Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 1c322d61eeb3640408ee1119729d5c21 +timeCreated: 1482252070 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRigidbody Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRigidbody Icon.png new file mode 100644 index 00000000..174c5067 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRigidbody Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRigidbody Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRigidbody Icon.png.meta new file mode 100644 index 00000000..8d93fea4 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRigidbody Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 1788ce7c914374d949486d9789c9f306 +timeCreated: 1502137043 +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: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRigidbody2D Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRigidbody2D Icon.png new file mode 100644 index 00000000..58f8861d Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRigidbody2D Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRigidbody2D Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRigidbody2D Icon.png.meta new file mode 100644 index 00000000..6f40dad3 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRigidbody2D Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 21e01eb398ab24a7abb1f3b493af6b20 +timeCreated: 1517939136 +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: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRod Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRod Icon.png new file mode 100644 index 00000000..b16bd502 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRod Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRod Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRod Icon.png.meta new file mode 100644 index 00000000..edf46095 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRod Icon.png.meta @@ -0,0 +1,95 @@ +fileFormatVersion: 2 +guid: 7125c3eebd3cc4f86aac51cca3ee1592 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRope Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRope Icon.png new file mode 100644 index 00000000..d8490871 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRope Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRope Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRope Icon.png.meta new file mode 100644 index 00000000..a4b2cf13 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRope Icon.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 7a860725829a34375a627c13703f0798 +labels: +- ObiRope +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + 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 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeChainRenderer Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeChainRenderer Icon.png new file mode 100644 index 00000000..ddd935d5 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeChainRenderer Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeChainRenderer Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeChainRenderer Icon.png.meta new file mode 100644 index 00000000..976d10a0 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeChainRenderer Icon.png.meta @@ -0,0 +1,95 @@ +fileFormatVersion: 2 +guid: 1289c40ad0e7c4fb3bd738f8a3f3e068 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeCursor Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeCursor Icon.png new file mode 100644 index 00000000..58f15b5e Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeCursor Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeCursor Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeCursor Icon.png.meta new file mode 100644 index 00000000..90a6dca2 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeCursor Icon.png.meta @@ -0,0 +1,100 @@ +fileFormatVersion: 2 +guid: 618cf36eb21e34118ac5697fe77e2c3e +timeCreated: 1491822329 +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 + - buildTarget: WebGL + 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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeExtrudedRenderer Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeExtrudedRenderer Icon.png new file mode 100644 index 00000000..2c5b674e Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeExtrudedRenderer Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeExtrudedRenderer Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeExtrudedRenderer Icon.png.meta new file mode 100644 index 00000000..99f29747 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeExtrudedRenderer Icon.png.meta @@ -0,0 +1,95 @@ +fileFormatVersion: 2 +guid: a552ed0e1c0fd47c38eeff6d60b5b115 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeLineRenderer Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeLineRenderer Icon.png new file mode 100644 index 00000000..91daeff1 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeLineRenderer Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeLineRenderer Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeLineRenderer Icon.png.meta new file mode 100644 index 00000000..1345c291 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeLineRenderer Icon.png.meta @@ -0,0 +1,95 @@ +fileFormatVersion: 2 +guid: 905a18c273af443d6bc588b59ebd56f6 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeMeshRenderer Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeMeshRenderer Icon.png new file mode 100644 index 00000000..1e644b1b Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeMeshRenderer Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeMeshRenderer Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeMeshRenderer Icon.png.meta new file mode 100644 index 00000000..1cae38b7 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeMeshRenderer Icon.png.meta @@ -0,0 +1,95 @@ +fileFormatVersion: 2 +guid: c5afdc6c291b44a68be8bf66702358a5 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeSection Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeSection Icon.png new file mode 100644 index 00000000..60ff7fb4 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeSection Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeSection Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeSection Icon.png.meta new file mode 100644 index 00000000..4f157733 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiRopeSection Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: fdb742a900c8d453ea5ce5027e80ad00 +timeCreated: 1464327508 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiShapeMatchingConstraints Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiShapeMatchingConstraints Icon.png new file mode 100644 index 00000000..8960a702 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiShapeMatchingConstraints Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiShapeMatchingConstraints Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiShapeMatchingConstraints Icon.png.meta new file mode 100644 index 00000000..51d75f59 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiShapeMatchingConstraints Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: a2686776a1c104bfd8868f056a5cd335 +timeCreated: 1530703943 +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: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSkinConstraints Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSkinConstraints Icon.png new file mode 100644 index 00000000..20c05c30 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSkinConstraints Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSkinConstraints Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSkinConstraints Icon.png.meta new file mode 100644 index 00000000..70912d2d --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSkinConstraints Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: e58e2a3c37c7547a8a791a56e0a1ace6 +timeCreated: 1447902275 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSkinnedCloth Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSkinnedCloth Icon.png new file mode 100644 index 00000000..b5f4303f Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSkinnedCloth Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSkinnedCloth Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSkinnedCloth Icon.png.meta new file mode 100644 index 00000000..fc0c584f --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSkinnedCloth Icon.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 630a97028bd4d4777b63c4f8d7091317 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSkinnedClothRenderer Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSkinnedClothRenderer Icon.png new file mode 100644 index 00000000..65edf362 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSkinnedClothRenderer Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSkinnedClothRenderer Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSkinnedClothRenderer Icon.png.meta new file mode 100644 index 00000000..deba6ac2 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSkinnedClothRenderer Icon.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: b876d8c51699543acb2d919b54e8fd7a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSoftbody Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSoftbody Icon.png new file mode 100644 index 00000000..c7cf8331 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSoftbody Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSoftbody Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSoftbody Icon.png.meta new file mode 100644 index 00000000..776e7944 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSoftbody Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 61d065505e09e47bc9f211c93b8d8941 +timeCreated: 1530704861 +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: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSoftbodySkinner Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSoftbodySkinner Icon.png new file mode 100644 index 00000000..2ff31e96 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSoftbodySkinner Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSoftbodySkinner Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSoftbodySkinner Icon.png.meta new file mode 100644 index 00000000..dd71bd93 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSoftbodySkinner Icon.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 654315230d2e241c3a9995c1e60507d0 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + 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 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSolver Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSolver Icon.png new file mode 100644 index 00000000..8c681727 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSolver Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSolver Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSolver Icon.png.meta new file mode 100644 index 00000000..1a22f8ae --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiSolver Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 4bb17fa3a0a95413a817e60391d26010 +timeCreated: 1447901223 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiStitcher Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiStitcher Icon.png new file mode 100644 index 00000000..60e88bde Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiStitcher Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiStitcher Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiStitcher Icon.png.meta new file mode 100644 index 00000000..68420da7 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiStitcher Icon.png.meta @@ -0,0 +1,100 @@ +fileFormatVersion: 2 +guid: ec05a2c75bb4a4ce5a3a1baa76b4c8d5 +timeCreated: 1489589286 +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 + - buildTarget: WebGL + 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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiStretchShearConstraints Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiStretchShearConstraints Icon.png new file mode 100644 index 00000000..5ddb1731 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiStretchShearConstraints Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiStretchShearConstraints Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiStretchShearConstraints Icon.png.meta new file mode 100644 index 00000000..6b1bb22f --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiStretchShearConstraints Icon.png.meta @@ -0,0 +1,95 @@ +fileFormatVersion: 2 +guid: b3583331769a946aab1e4c59859547b2 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiTearableCloth Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiTearableCloth Icon.png new file mode 100644 index 00000000..6e414957 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiTearableCloth Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiTearableCloth Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiTearableCloth Icon.png.meta new file mode 100644 index 00000000..26dc0361 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiTearableCloth Icon.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: b77f723c576a04907a94ed4c1a78f74d +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiTearableClothRenderer Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiTearableClothRenderer Icon.png new file mode 100644 index 00000000..1c8b05a6 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiTearableClothRenderer Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiTearableClothRenderer Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiTearableClothRenderer Icon.png.meta new file mode 100644 index 00000000..8f16f5bb --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiTearableClothRenderer Icon.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 13f5839d0b38e4abdb0dc5015a82afdc +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiTetherConstraints Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiTetherConstraints Icon.png new file mode 100644 index 00000000..85007acf Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiTetherConstraints Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiTetherConstraints Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiTetherConstraints Icon.png.meta new file mode 100644 index 00000000..689fd5a3 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiTetherConstraints Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 45a4a839cd07d49f698be261ce71ee3c +timeCreated: 1448331895 +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/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiVoidZone Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiVoidZone Icon.png new file mode 100644 index 00000000..595b09c8 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiVoidZone Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiVoidZone Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiVoidZone Icon.png.meta new file mode 100644 index 00000000..083fee0f --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiVoidZone Icon.png.meta @@ -0,0 +1,122 @@ +fileFormatVersion: 2 +guid: eac6271e2e50d4b2dbf2dfeff9b65604 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: 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: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiVolumeConstraints Icon.png b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiVolumeConstraints Icon.png new file mode 100644 index 00000000..eefc8ae9 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiVolumeConstraints Icon.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiVolumeConstraints Icon.png.meta b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiVolumeConstraints Icon.png.meta new file mode 100644 index 00000000..3fbf880e --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/Icons/ObiVolumeConstraints Icon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: d9d3ddf824bd449e5b405439ee034b12 +timeCreated: 1448433293 +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/xiaofang/Assets/Obi/Editor/Resources/InvertButton.psd b/xiaofang/Assets/Obi/Editor/Resources/InvertButton.psd new file mode 100644 index 00000000..59953429 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/InvertButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/InvertButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/InvertButton.psd.meta new file mode 100644 index 00000000..766dfafc --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/InvertButton.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: d105dc041854c4b22b26600e565e6dc8 +timeCreated: 1478799531 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/LeafButton.png b/xiaofang/Assets/Obi/Editor/Resources/LeafButton.png new file mode 100644 index 00000000..c097c800 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/LeafButton.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/LeafButton.png.meta b/xiaofang/Assets/Obi/Editor/Resources/LeafButton.png.meta new file mode 100644 index 00000000..dafc45a7 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/LeafButton.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: fc6329308ec7e4fa0a7134b8c1294dfd +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + 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 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/MaskButton.psd b/xiaofang/Assets/Obi/Editor/Resources/MaskButton.psd new file mode 100644 index 00000000..5e3c792e Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/MaskButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/MaskButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/MaskButton.psd.meta new file mode 100644 index 00000000..b2c8c9f9 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/MaskButton.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: 79009ead5070b47429cdb81d702888c1 +timeCreated: 1478802054 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/OpenCloseCurve.psd b/xiaofang/Assets/Obi/Editor/Resources/OpenCloseCurve.psd new file mode 100644 index 00000000..b315d257 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/OpenCloseCurve.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/OpenCloseCurve.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/OpenCloseCurve.psd.meta new file mode 100644 index 00000000..3ca687cf --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/OpenCloseCurve.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: 0dd1ebceaea0d43018983f4b506cb72b +timeCreated: 1478799645 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/OptimizeButton.psd b/xiaofang/Assets/Obi/Editor/Resources/OptimizeButton.psd new file mode 100644 index 00000000..095ff613 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/OptimizeButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/OptimizeButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/OptimizeButton.psd.meta new file mode 100644 index 00000000..ebfc164b --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/OptimizeButton.psd.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 4343e41c062884ff4af81a34ade6d27c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/OrientControlPoint.psd b/xiaofang/Assets/Obi/Editor/Resources/OrientControlPoint.psd new file mode 100644 index 00000000..22d8bf73 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/OrientControlPoint.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/OrientControlPoint.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/OrientControlPoint.psd.meta new file mode 100644 index 00000000..4717e352 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/OrientControlPoint.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: 7727f2388bff242b1bdf55ae7a1abaec +timeCreated: 1478799645 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/PaddingMaterial.mat b/xiaofang/Assets/Obi/Editor/Resources/PaddingMaterial.mat new file mode 100644 index 00000000..70551f0a --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/PaddingMaterial.mat @@ -0,0 +1,77 @@ +%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: PaddingMaterial + m_Shader: {fileID: 4800000, guid: a915cd5b44e5b45509750bc8e231c325, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 7e271617753294f4aaf5d79862c5d182, 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: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Glossiness: 0.5 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Padding: 64 + - _Parallax: 0.02 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Editor/Resources/PaddingMaterial.mat.meta b/xiaofang/Assets/Obi/Editor/Resources/PaddingMaterial.mat.meta new file mode 100644 index 00000000..b85cec38 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/PaddingMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8c11f7c3415044fd9b6bc7896f38f9d8 +timeCreated: 1445287098 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/PaddingShader.shader b/xiaofang/Assets/Obi/Editor/Resources/PaddingShader.shader new file mode 100644 index 00000000..afab7e2f --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/PaddingShader.shader @@ -0,0 +1,81 @@ +Shader "Obi/PaddingShader" +{ + Properties + { + _MainTex ("Texture", 2D) = "white" {} + _Padding ("Paddding", Int) = 32 + } + SubShader + { + // No culling or depth + Cull Off ZWrite Off ZTest Always + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct v2f + { + float2 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + }; + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = v.uv; + return o; + } + + sampler2D _MainTex; + float4 _MainTex_TexelSize; + int _Padding; + static const float2 offsets[8] = {float2(-1,0), float2(1,0), float2(0,1), float2(0,-1), float2(-1,1), float2(1,1), float2(1,-1), float2(-1,-1)}; + + fixed4 frag (v2f i) : SV_Target + { + + fixed4 sample = tex2D(_MainTex, i.uv); + + if (sample.a > 0) + return sample; + + fixed4 minSample = sample; + float minDist = 99999999; + + for (int k = 1; k < _Padding; ++k) + { + for (int j = 0; j < 8; ++j) + { + float2 offsetUV = i.uv + offsets[j] * _MainTex_TexelSize.xy * k; + fixed4 offsetSample = tex2Dlod(_MainTex, float4(offsetUV.xy,0,0)); + + if (offsetSample.a > 0) + { + float dist = length(i.uv - offsetUV); + if (dist < minDist) + { + minDist = dist; + minSample = offsetSample; + } + } + } + } + + return minSample; + } + ENDCG + } + } +} diff --git a/xiaofang/Assets/Obi/Editor/Resources/PaddingShader.shader.meta b/xiaofang/Assets/Obi/Editor/Resources/PaddingShader.shader.meta new file mode 100644 index 00000000..88728fde --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/PaddingShader.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a915cd5b44e5b45509750bc8e231c325 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/PauseButton.psd b/xiaofang/Assets/Obi/Editor/Resources/PauseButton.psd new file mode 100644 index 00000000..c22cc9cd Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/PauseButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/PauseButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/PauseButton.psd.meta new file mode 100644 index 00000000..6e24ea62 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/PauseButton.psd.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 280ec959fe3324151be804cf285fe931 +timeCreated: 1458681991 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/PencilButton.psd b/xiaofang/Assets/Obi/Editor/Resources/PencilButton.psd new file mode 100644 index 00000000..b6705e58 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/PencilButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/PencilButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/PencilButton.psd.meta new file mode 100644 index 00000000..8e30edb8 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/PencilButton.psd.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: d7e21f95a6c084fd5be0c6ab594e4b78 +timeCreated: 1442227197 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/PinButton.psd b/xiaofang/Assets/Obi/Editor/Resources/PinButton.psd new file mode 100644 index 00000000..619b34e7 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/PinButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/PinButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/PinButton.psd.meta new file mode 100644 index 00000000..0c59cff6 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/PinButton.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: 0da1cb5104a8b4a60b761e4d1744d8ae +timeCreated: 1478802054 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/PinTranslation.psd b/xiaofang/Assets/Obi/Editor/Resources/PinTranslation.psd new file mode 100644 index 00000000..44495627 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/PinTranslation.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/PinTranslation.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/PinTranslation.psd.meta new file mode 100644 index 00000000..db5c7f96 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/PinTranslation.psd.meta @@ -0,0 +1,95 @@ +fileFormatVersion: 2 +guid: 89138aa3f21fa426aa57afb83ebc3df3 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/PlayButton.psd b/xiaofang/Assets/Obi/Editor/Resources/PlayButton.psd new file mode 100644 index 00000000..296a318f Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/PlayButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/PlayButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/PlayButton.psd.meta new file mode 100644 index 00000000..ca8974d2 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/PlayButton.psd.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 0368711c00a38431db570869752031a3 +timeCreated: 1435830837 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/PropertyGradientMaterial.mat b/xiaofang/Assets/Obi/Editor/Resources/PropertyGradientMaterial.mat new file mode 100644 index 00000000..1aed3006 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/PropertyGradientMaterial.mat @@ -0,0 +1,76 @@ +%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: PropertyGradientMaterial + m_Shader: {fileID: 4800000, guid: 41dfefbc390fc41cc8e1b421c43e52f5, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 7e271617753294f4aaf5d79862c5d182, 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: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Glossiness: 0.5 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Editor/Resources/PropertyGradientMaterial.mat.meta b/xiaofang/Assets/Obi/Editor/Resources/PropertyGradientMaterial.mat.meta new file mode 100644 index 00000000..ee658f29 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/PropertyGradientMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cd3a36913cf194d75a271606ea32cde5 +timeCreated: 1445287098 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/PropertyGradientMaterial.shader b/xiaofang/Assets/Obi/Editor/Resources/PropertyGradientMaterial.shader new file mode 100644 index 00000000..73c3cebd --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/PropertyGradientMaterial.shader @@ -0,0 +1,95 @@ +Shader "Obi/PropertyGradientMaterial" { + + Properties { + _MainTex ("Base (RGB)", 2D) = "white" {} + } + + SubShader { + + Pass { + + Offset -0.5, -0.5 + Cull Back + Fog { Mode Off } + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct vin{ + float4 vertex : POSITION; + fixed4 color : COLOR; + float2 texcoord : TEXCOORD0; + }; + + struct v2f { + float4 pos: POSITION; + fixed4 color : COLOR; + float2 texcoord : TEXCOORD0; + }; + + sampler2D _MainTex; + + v2f vert(vin v) { + v2f o; + o.pos = UnityObjectToClipPos (v.vertex); + o.texcoord = v.texcoord; + o.color = v.color; + return o; + } + + fixed4 frag(v2f i) : SV_Target { + return i.color; + } + + ENDCG + } + + Pass { + + Offset -1, -1 + Cull Back + ZWrite Off + Blend SrcAlpha OneMinusSrcAlpha + Fog { Mode Off } + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct vin{ + float4 vertex : POSITION; + fixed4 color : COLOR; + float2 texcoord : TEXCOORD0; + }; + + struct v2f { + float4 pos: POSITION; + fixed4 color : COLOR; + float2 texcoord : TEXCOORD0; + }; + + sampler2D _MainTex; + + v2f vert(vin v) { + v2f o; + o.pos = UnityObjectToClipPos (v.vertex); + o.texcoord = v.texcoord; + o.color = v.color; + return o; + } + + fixed4 frag(v2f i) : SV_Target { + return i.color; + } + + ENDCG + } + + } +} + diff --git a/xiaofang/Assets/Obi/Editor/Resources/PropertyGradientMaterial.shader.meta b/xiaofang/Assets/Obi/Editor/Resources/PropertyGradientMaterial.shader.meta new file mode 100644 index 00000000..2a3123aa --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/PropertyGradientMaterial.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 41dfefbc390fc41cc8e1b421c43e52f5 +timeCreated: 1445287084 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/RadiusIndicator.psd b/xiaofang/Assets/Obi/Editor/Resources/RadiusIndicator.psd new file mode 100644 index 00000000..b5142158 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/RadiusIndicator.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/RadiusIndicator.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/RadiusIndicator.psd.meta new file mode 100644 index 00000000..7f9e818b --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/RadiusIndicator.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: fe4fd4da6245f48c1bcd64c8422b7b4c +timeCreated: 1471035768 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/RecButton.psd b/xiaofang/Assets/Obi/Editor/Resources/RecButton.psd new file mode 100644 index 00000000..d9cefe3d Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/RecButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/RecButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/RecButton.psd.meta new file mode 100644 index 00000000..bbb80a95 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/RecButton.psd.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: d5d19ff51922e4539a782a48d6adf4e1 +timeCreated: 1458681621 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/RemoveButton.psd b/xiaofang/Assets/Obi/Editor/Resources/RemoveButton.psd new file mode 100644 index 00000000..d422e962 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/RemoveButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/RemoveButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/RemoveButton.psd.meta new file mode 100644 index 00000000..d561f91f --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/RemoveButton.psd.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 8b56a65aecb4c42dea430c75690b8a4b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/RemoveControlPoint.psd b/xiaofang/Assets/Obi/Editor/Resources/RemoveControlPoint.psd new file mode 100644 index 00000000..acf90440 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/RemoveControlPoint.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/RemoveControlPoint.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/RemoveControlPoint.psd.meta new file mode 100644 index 00000000..da5349a3 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/RemoveControlPoint.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: 7d2ee37b895e649c186b4de7004bd444 +timeCreated: 1478799645 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/RemoveIcon.psd b/xiaofang/Assets/Obi/Editor/Resources/RemoveIcon.psd new file mode 100644 index 00000000..48f6bb12 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/RemoveIcon.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/RemoveIcon.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/RemoveIcon.psd.meta new file mode 100644 index 00000000..069fee78 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/RemoveIcon.psd.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 79919ab1f90654f4f811134da7164129 +timeCreated: 1440144040 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/RestoreButton.psd b/xiaofang/Assets/Obi/Editor/Resources/RestoreButton.psd new file mode 100644 index 00000000..32674d37 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/RestoreButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/RestoreButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/RestoreButton.psd.meta new file mode 100644 index 00000000..6086b836 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/RestoreButton.psd.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 3b85a7a10acb94ba093952ee1cb68420 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/RewindButton.psd b/xiaofang/Assets/Obi/Editor/Resources/RewindButton.psd new file mode 100644 index 00000000..73b9694e Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/RewindButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/RewindButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/RewindButton.psd.meta new file mode 100644 index 00000000..5664ebb1 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/RewindButton.psd.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 3276c82f639db4e1393d50621591b623 +timeCreated: 1435831272 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/RotateControlPoint.psd b/xiaofang/Assets/Obi/Editor/Resources/RotateControlPoint.psd new file mode 100644 index 00000000..d21b4f3f Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/RotateControlPoint.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/RotateControlPoint.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/RotateControlPoint.psd.meta new file mode 100644 index 00000000..dc569cf0 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/RotateControlPoint.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: f33b6dcf4f7f946909841f077b4f1aa3 +timeCreated: 1478799645 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/ScaleControlPoint.psd b/xiaofang/Assets/Obi/Editor/Resources/ScaleControlPoint.psd new file mode 100644 index 00000000..cb52d726 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/ScaleControlPoint.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/ScaleControlPoint.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/ScaleControlPoint.psd.meta new file mode 100644 index 00000000..2f4c39cc --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/ScaleControlPoint.psd.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: d13fb15ff13b2475b8585a693545eb0c +timeCreated: 1442227197 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/SelectIcon.psd b/xiaofang/Assets/Obi/Editor/Resources/SelectIcon.psd new file mode 100644 index 00000000..719afb5c Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/SelectIcon.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/SelectIcon.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/SelectIcon.psd.meta new file mode 100644 index 00000000..82a5cbeb --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/SelectIcon.psd.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: d10211a5e35be4a1f97e25a7f78b84fd +timeCreated: 1442227627 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/SelectedWorld_bck.psd b/xiaofang/Assets/Obi/Editor/Resources/SelectedWorld_bck.psd new file mode 100644 index 00000000..4d590d62 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/SelectedWorld_bck.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/SelectedWorld_bck.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/SelectedWorld_bck.psd.meta new file mode 100644 index 00000000..71638193 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/SelectedWorld_bck.psd.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 01844e929694344c79f595973dd49a4a +timeCreated: 1440124004 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/SeparatorLine.psd b/xiaofang/Assets/Obi/Editor/Resources/SeparatorLine.psd new file mode 100644 index 00000000..b3234dc5 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/SeparatorLine.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/SeparatorLine.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/SeparatorLine.psd.meta new file mode 100644 index 00000000..e939ca9f --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/SeparatorLine.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: ce2eac6e238e5450991af12bb7d594c1 +timeCreated: 1442217896 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -2 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/ShowTangentHandles.psd b/xiaofang/Assets/Obi/Editor/Resources/ShowTangentHandles.psd new file mode 100644 index 00000000..80bc1857 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/ShowTangentHandles.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/ShowTangentHandles.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/ShowTangentHandles.psd.meta new file mode 100644 index 00000000..91403965 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/ShowTangentHandles.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: 913a0a12dbef54c7ca939f3dc86dc19f +timeCreated: 1478799645 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/ShowThicknessHandles.psd b/xiaofang/Assets/Obi/Editor/Resources/ShowThicknessHandles.psd new file mode 100644 index 00000000..717c329e Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/ShowThicknessHandles.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/ShowThicknessHandles.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/ShowThicknessHandles.psd.meta new file mode 100644 index 00000000..bb3842d3 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/ShowThicknessHandles.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: 71c2b8c0a1d5b4908a4764a8beed8da6 +timeCreated: 1478799645 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/SmoothButton.psd b/xiaofang/Assets/Obi/Editor/Resources/SmoothButton.psd new file mode 100644 index 00000000..bce383f6 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/SmoothButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/SmoothButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/SmoothButton.psd.meta new file mode 100644 index 00000000..66ef2bac --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/SmoothButton.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: 51e011fff1bad43078a63a1c71b11965 +timeCreated: 1478802054 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/StepButton.psd b/xiaofang/Assets/Obi/Editor/Resources/StepButton.psd new file mode 100644 index 00000000..049bfe91 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/StepButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/StepButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/StepButton.psd.meta new file mode 100644 index 00000000..b6b08a1a --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/StepButton.psd.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 3a4a9652d5a3546a494c48ad14e4b492 +timeCreated: 1435831067 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/StopButton.psd b/xiaofang/Assets/Obi/Editor/Resources/StopButton.psd new file mode 100644 index 00000000..d601f869 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/StopButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/StopButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/StopButton.psd.meta new file mode 100644 index 00000000..e0723097 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/StopButton.psd.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: d7f73785945ac441d9d2c7e6aea7c600 +timeCreated: 1435831194 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/StopRecButton.psd b/xiaofang/Assets/Obi/Editor/Resources/StopRecButton.psd new file mode 100644 index 00000000..2c3b6316 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/StopRecButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/StopRecButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/StopRecButton.psd.meta new file mode 100644 index 00000000..defe7847 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/StopRecButton.psd.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: e4c64699292b6490aac7e91c52abdc2c +timeCreated: 1458681626 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/TextureIcon.psd b/xiaofang/Assets/Obi/Editor/Resources/TextureIcon.psd new file mode 100644 index 00000000..e7291762 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/TextureIcon.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/TextureIcon.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/TextureIcon.psd.meta new file mode 100644 index 00000000..0821ef67 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/TextureIcon.psd.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 931c48569a82e4dae84d4702bf6da199 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + 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/xiaofang/Assets/Obi/Editor/Resources/ToggleableGroupBg.psd b/xiaofang/Assets/Obi/Editor/Resources/ToggleableGroupBg.psd new file mode 100644 index 00000000..5a186ceb Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/ToggleableGroupBg.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/ToggleableGroupBg.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/ToggleableGroupBg.psd.meta new file mode 100644 index 00000000..caa2025b --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/ToggleableGroupBg.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: f08eeaacb82744bf498511aef9a6c649 +timeCreated: 1442217896 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -2 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/TopologyBorders.shader b/xiaofang/Assets/Obi/Editor/Resources/TopologyBorders.shader new file mode 100644 index 00000000..923f6aa4 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/TopologyBorders.shader @@ -0,0 +1,54 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + + +Shader "Obi/TopologyBorders" { +Properties { + _Color ("Main Color", Color) = (1,1,1,1) +} + +SubShader { + Tags { "RenderType"="Opaque" } + LOD 100 + + Pass { + + ZWrite Off + ZTest always + Cull Off + Fog { Mode Off } + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fog + + #include "UnityCG.cginc" + + struct appdata_t { + float4 vertex : POSITION; + }; + + struct v2f { + float4 vertex : SV_POSITION; + }; + + fixed4 _Color; + + v2f vert (appdata_t v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + return o; + } + + fixed4 frag (v2f i) : COLOR + { + fixed4 col = _Color; + UNITY_OPAQUE_ALPHA(col.a); + return col; + } + ENDCG + } +} + +} diff --git a/xiaofang/Assets/Obi/Editor/Resources/TopologyBorders.shader.meta b/xiaofang/Assets/Obi/Editor/Resources/TopologyBorders.shader.meta new file mode 100644 index 00000000..584e2885 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/TopologyBorders.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 973221b91492243759c6f0871607f830 +timeCreated: 1459228603 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/TopologyPreview.mat b/xiaofang/Assets/Obi/Editor/Resources/TopologyPreview.mat new file mode 100644 index 00000000..668ebd1c --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/TopologyPreview.mat @@ -0,0 +1,81 @@ +%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: TopologyPreview + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: + - _EMISSION + m_InvalidKeywords: [] + m_LightmapFlags: 1 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.49803922, g: 0.49803922, b: 0.49803922, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Editor/Resources/TopologyPreview.mat.meta b/xiaofang/Assets/Obi/Editor/Resources/TopologyPreview.mat.meta new file mode 100644 index 00000000..dfc81596 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/TopologyPreview.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 62dd1825e029c4d6291eb024124c520a +timeCreated: 1446008685 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/TopologyPreviewBorder.mat b/xiaofang/Assets/Obi/Editor/Resources/TopologyPreviewBorder.mat new file mode 100644 index 00000000..9f5a8fc7 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/TopologyPreviewBorder.mat @@ -0,0 +1,76 @@ +%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: TopologyPreviewBorder + m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Glossiness: 0.5 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Editor/Resources/TopologyPreviewBorder.mat.meta b/xiaofang/Assets/Obi/Editor/Resources/TopologyPreviewBorder.mat.meta new file mode 100644 index 00000000..32b303a9 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/TopologyPreviewBorder.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 83b0018e22cec4650b2f51e7b1cae99f +timeCreated: 1446016691 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/TranslateControlPoint.psd b/xiaofang/Assets/Obi/Editor/Resources/TranslateControlPoint.psd new file mode 100644 index 00000000..2c3ee0c7 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/TranslateControlPoint.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/TranslateControlPoint.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/TranslateControlPoint.psd.meta new file mode 100644 index 00000000..d0e97e74 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/TranslateControlPoint.psd.meta @@ -0,0 +1,116 @@ +fileFormatVersion: 2 +guid: b759d71b63d26412f9bdf4730efccd87 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 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 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 1 + pSDShowRemoveMatteOption: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/TrunkButton.png b/xiaofang/Assets/Obi/Editor/Resources/TrunkButton.png new file mode 100644 index 00000000..6ed2d0f3 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/TrunkButton.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/TrunkButton.png.meta b/xiaofang/Assets/Obi/Editor/Resources/TrunkButton.png.meta new file mode 100644 index 00000000..abc62b32 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/TrunkButton.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: ca503dc9534e0488b98fc100f4fd1d5d +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + 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 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/UVSpaceColor.shader b/xiaofang/Assets/Obi/Editor/Resources/UVSpaceColor.shader new file mode 100644 index 00000000..c8b2ac3e --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/UVSpaceColor.shader @@ -0,0 +1,47 @@ +Shader "Obi/UVSpaceColor" +{ + SubShader + { + Tags { "RenderType"="Opaque" } + LOD 100 + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + fixed4 color : COLOR; + float2 uv : TEXCOORD0; + }; + + struct v2f + { + float2 uv : TEXCOORD0; + fixed4 color : COLOR; + float4 vertex : SV_POSITION; + }; + + v2f vert (appdata v) + { + v2f o; + o.uv = v.uv; + o.vertex = float4(v.uv.xy,0,1); + o.vertex = UnityObjectToClipPos(float4(v.uv,0,1)); + o.color = v.color; + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + return i.color; + } + ENDCG + } + } +} diff --git a/xiaofang/Assets/Obi/Editor/Resources/UVSpaceColor.shader.meta b/xiaofang/Assets/Obi/Editor/Resources/UVSpaceColor.shader.meta new file mode 100644 index 00000000..367df23a --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/UVSpaceColor.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 459ae7c4c81724f20b6810647d2dbd3d +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/UVSpaceColorMaterial.mat b/xiaofang/Assets/Obi/Editor/Resources/UVSpaceColorMaterial.mat new file mode 100644 index 00000000..9bbe0d27 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/UVSpaceColorMaterial.mat @@ -0,0 +1,76 @@ +%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: UVSpaceColorMaterial + m_Shader: {fileID: 4800000, guid: 459ae7c4c81724f20b6810647d2dbd3d, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 7e271617753294f4aaf5d79862c5d182, 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: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Glossiness: 0.5 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Editor/Resources/UVSpaceColorMaterial.mat.meta b/xiaofang/Assets/Obi/Editor/Resources/UVSpaceColorMaterial.mat.meta new file mode 100644 index 00000000..66a8487b --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/UVSpaceColorMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8d64d32033a9145218d8c42c02e53b63 +timeCreated: 1445287098 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/UnpinButton.psd b/xiaofang/Assets/Obi/Editor/Resources/UnpinButton.psd new file mode 100644 index 00000000..46e280c5 Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/UnpinButton.psd differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/UnpinButton.psd.meta b/xiaofang/Assets/Obi/Editor/Resources/UnpinButton.psd.meta new file mode 100644 index 00000000..a96c6e38 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/UnpinButton.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: 546d0fbcbc7794babadce998d53cc471 +timeCreated: 1478802054 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/VoxelMaterial.mat b/xiaofang/Assets/Obi/Editor/Resources/VoxelMaterial.mat new file mode 100644 index 00000000..0662b1c7 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/VoxelMaterial.mat @@ -0,0 +1,79 @@ +%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: VoxelMaterial + m_Shader: {fileID: 4800000, guid: a5455d2f5ab50497d8642726d64b9cd5, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 7e271617753294f4aaf5d79862c5d182, 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: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Glossiness: 0.5 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _Size: 0.95 + - _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} + - _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: [] diff --git a/xiaofang/Assets/Obi/Editor/Resources/VoxelMaterial.mat.meta b/xiaofang/Assets/Obi/Editor/Resources/VoxelMaterial.mat.meta new file mode 100644 index 00000000..344e7c4d --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/VoxelMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 130b71128e55b4a3f9a4dceca6667bf9 +timeCreated: 1445287098 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/VoxelMaterial.shader b/xiaofang/Assets/Obi/Editor/Resources/VoxelMaterial.shader new file mode 100644 index 00000000..55d1a82b --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/VoxelMaterial.shader @@ -0,0 +1,63 @@ +Shader "Obi/VoxelMaterial" { + + Properties { + _MainTex ("Base (RGB)", 2D) = "white" {} + _Size("Square size",Float) = 0.95 + _InsideColor("Inside color",Color) = (1,1,1,1) + _OutsideColor("Outside color",Color) = (0,0,0,1) + } + + SubShader { + + Pass { + + Cull Back + Fog { Mode Off } + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct vin{ + float4 vertex : POSITION; + fixed4 color : COLOR; + float2 texcoord : TEXCOORD0; + }; + + struct v2f { + float4 pos: POSITION; + fixed4 color : COLOR; + float2 texcoord : TEXCOORD0; + }; + + sampler2D _MainTex; + float _Size; + fixed4 _InsideColor; + fixed4 _OutsideColor; + + v2f vert(vin v) { + v2f o; + o.pos = UnityObjectToClipPos (v.vertex); + o.texcoord = v.texcoord; + o.color = v.color; + return o; + } + + fixed4 frag(v2f i) : SV_Target { + + float2 centered = i.texcoord * 2 - 1; + float square = max(abs(centered.x), abs(centered.y)) - 0.05f/(2.0*1.4142); + float width = fwidth(square); + float alpha = smoothstep(_Size - width, _Size, square); + + return lerp(_InsideColor,_OutsideColor,alpha); + } + + ENDCG + } + + } +} + diff --git a/xiaofang/Assets/Obi/Editor/Resources/VoxelMaterial.shader.meta b/xiaofang/Assets/Obi/Editor/Resources/VoxelMaterial.shader.meta new file mode 100644 index 00000000..d5800a63 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/VoxelMaterial.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a5455d2f5ab50497d8642726d64b9cd5 +timeCreated: 1445287084 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/Resources/obi_editor_logo.png b/xiaofang/Assets/Obi/Editor/Resources/obi_editor_logo.png new file mode 100644 index 00000000..51c3c88b Binary files /dev/null and b/xiaofang/Assets/Obi/Editor/Resources/obi_editor_logo.png differ diff --git a/xiaofang/Assets/Obi/Editor/Resources/obi_editor_logo.png.meta b/xiaofang/Assets/Obi/Editor/Resources/obi_editor_logo.png.meta new file mode 100644 index 00000000..464725b2 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/Resources/obi_editor_logo.png.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: 8eeefc8d5c2ab4e0582a93f719bcd31a +timeCreated: 1471538194 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod.meta b/xiaofang/Assets/Obi/Editor/RopeAndRod.meta new file mode 100644 index 00000000..2f90f428 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 00c9b99ffa90a4646b360dcad1ea0b84 +labels: +- ObiRope +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/Blueprints.meta b/xiaofang/Assets/Obi/Editor/RopeAndRod/Blueprints.meta new file mode 100644 index 00000000..2d99c230 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/Blueprints.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 16f13a837c41b437a87aa83162abd677 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/Blueprints/ObiRopeBaseBlueprintEditor.cs b/xiaofang/Assets/Obi/Editor/RopeAndRod/Blueprints/ObiRopeBaseBlueprintEditor.cs new file mode 100644 index 00000000..ff5c98e1 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/Blueprints/ObiRopeBaseBlueprintEditor.cs @@ -0,0 +1,58 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; +using System.Collections; +using System; + +namespace Obi +{ + [CustomEditor(typeof(ObiRopeBlueprintBase), true)] + public class ObiRopeBaseBlueprintEditor : ObiActorBlueprintEditor + { + + public override void OnEnable() + { + base.OnEnable(); + Undo.undoRedoPerformed += UndoRedoPerformed; + } + + public override void OnDisable() + { + base.OnDisable(); + Undo.undoRedoPerformed -= UndoRedoPerformed; + } + + void UndoRedoPerformed() + { + // Re-generate the blueprint after undo/redo. + if (blueprint != null) + blueprint.GenerateImmediate(); + } + + public override void OnInspectorGUI() + { + + serializedObject.UpdateIfRequiredOrScript(); + + EditorGUILayout.BeginVertical(EditorStyles.inspectorDefaultMargins); + Editor.DrawPropertiesExcluding(serializedObject, "m_Script"); + + EditorGUILayout.EndVertical(); + + if (GUI.changed) + { + serializedObject.ApplyModifiedProperties(); + + // Re-generate the blueprint if any element has been changed. + if (blueprint != null) + 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. + EditorUtility.SetDirty(this); + } + } + } + + +} diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/Blueprints/ObiRopeBaseBlueprintEditor.cs.meta b/xiaofang/Assets/Obi/Editor/RopeAndRod/Blueprints/ObiRopeBaseBlueprintEditor.cs.meta new file mode 100644 index 00000000..c5925c27 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/Blueprints/ObiRopeBaseBlueprintEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 87efff4816bdd4fa4bda69ca33516658 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/BonePropertyCurveDrawer.cs b/xiaofang/Assets/Obi/Editor/RopeAndRod/BonePropertyCurveDrawer.cs new file mode 100644 index 00000000..8d240cde --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/BonePropertyCurveDrawer.cs @@ -0,0 +1,29 @@ +using UnityEngine; +using UnityEditor; + +namespace Obi +{ + [CustomPropertyDrawer(typeof(ObiBone.BonePropertyCurve))] + public class BonePropertyCurveDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(position, label, property); + + float curveFieldWidth = (position.width - EditorGUIUtility.labelWidth) * 0.5f; + + var multRect = new Rect(position.x, position.y, position.width - curveFieldWidth, position.height); + EditorGUI.PropertyField(multRect, property.FindPropertyRelative("multiplier"), label); + + var indent = EditorGUI.indentLevel; + EditorGUI.indentLevel = 0; + + var curveRect = new Rect(position.x + position.width - curveFieldWidth + 3, position.y, curveFieldWidth - 3, position.height); + EditorGUI.CurveField(curveRect, property.FindPropertyRelative("curve"), Color.green, new Rect(0, 0, 1, 1), GUIContent.none); + + EditorGUI.indentLevel = indent; + + EditorGUI.EndProperty(); + } + } +} diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/BonePropertyCurveDrawer.cs.meta b/xiaofang/Assets/Obi/Editor/RopeAndRod/BonePropertyCurveDrawer.cs.meta new file mode 100644 index 00000000..3fb84d07 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/BonePropertyCurveDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b78a1342294ee4644a9a0d6a247d3604 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/IgnoredBoneDrawer.cs b/xiaofang/Assets/Obi/Editor/RopeAndRod/IgnoredBoneDrawer.cs new file mode 100644 index 00000000..2ba8fccf --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/IgnoredBoneDrawer.cs @@ -0,0 +1,30 @@ +using UnityEngine; +using UnityEditor; + +namespace Obi +{ + [CustomPropertyDrawer(typeof(ObiBone.IgnoredBone))] + public class IgnoredBoneDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(position, label, property); + + GUI.Box(EditorGUI.IndentedRect(position), GUIContent.none, ObiEditorUtils.GetToggleablePropertyGroupStyle()); + + var rect = new Rect(position.x + 4, position.y + EditorGUIUtility.standardVerticalSpacing, position.width - 8, EditorGUIUtility.singleLineHeight); + EditorGUI.PropertyField(rect, property.FindPropertyRelative("bone"), label); + + rect.position = new Vector2(rect.position.x, rect.position.y + EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing); + EditorGUI.PropertyField(rect, property.FindPropertyRelative("ignoreChildren")); + + EditorGUI.EndProperty(); + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + int lineCount = 2; + return EditorGUIUtility.singleLineHeight * lineCount + EditorGUIUtility.standardVerticalSpacing * (lineCount + 1); + } + } +} diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/IgnoredBoneDrawer.cs.meta b/xiaofang/Assets/Obi/Editor/RopeAndRod/IgnoredBoneDrawer.cs.meta new file mode 100644 index 00000000..f1da0074 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/IgnoredBoneDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f9e4bd0b2f9544e039fef4cd5d95232f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiBoneEditor.cs b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiBoneEditor.cs new file mode 100644 index 00000000..0aedd61e --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiBoneEditor.cs @@ -0,0 +1,225 @@ +using UnityEditor; +using UnityEngine; + +namespace Obi +{ + + [CustomEditor(typeof(ObiBone))] + public class ObiBoneEditor : Editor + { + ObiBone bone; + + SerializedProperty collisionMaterial; + SerializedProperty selfCollisions; + SerializedProperty surfaceCollisions; + + SerializedProperty mass; + SerializedProperty rotationalMass; + SerializedProperty radius; + + SerializedProperty skinConstraintsEnabled; + SerializedProperty skinCompliance; + SerializedProperty skinRadius; + + SerializedProperty stretchShearConstraintsEnabled; + SerializedProperty stretchCompliance; + SerializedProperty shear1Compliance; + SerializedProperty shear2Compliance; + + SerializedProperty bendTwistConstraintsEnabled; + SerializedProperty torsionCompliance; + SerializedProperty bend1Compliance; + SerializedProperty bend2Compliance; + SerializedProperty plasticYield; + SerializedProperty plasticCreep; + + SerializedProperty aerodynamicsEnabled; + SerializedProperty drag; + SerializedProperty lift; + + SerializedProperty fixRoot; + SerializedProperty stretchBones; + SerializedProperty ignored; + + public void OnEnable() + { + bone = (ObiBone)target; + + fixRoot = serializedObject.FindProperty("fixRoot"); + stretchBones = serializedObject.FindProperty("stretchBones"); + ignored = serializedObject.FindProperty("ignored"); + + collisionMaterial = serializedObject.FindProperty("m_CollisionMaterial"); + selfCollisions = serializedObject.FindProperty("m_SelfCollisions"); + surfaceCollisions = serializedObject.FindProperty("m_SurfaceCollisions"); + + mass = serializedObject.FindProperty("_mass"); + rotationalMass = serializedObject.FindProperty("_rotationalMass"); + radius = serializedObject.FindProperty("_radius"); + + skinConstraintsEnabled = serializedObject.FindProperty("_skinConstraintsEnabled"); + skinRadius = serializedObject.FindProperty("_skinRadius"); + skinCompliance = serializedObject.FindProperty("_skinCompliance"); + + stretchShearConstraintsEnabled = serializedObject.FindProperty("_stretchShearConstraintsEnabled"); + stretchCompliance = serializedObject.FindProperty("_stretchCompliance"); + shear1Compliance = serializedObject.FindProperty("_shear1Compliance"); + shear2Compliance = serializedObject.FindProperty("_shear2Compliance"); + + bendTwistConstraintsEnabled = serializedObject.FindProperty("_bendTwistConstraintsEnabled"); + torsionCompliance = serializedObject.FindProperty("_torsionCompliance"); + bend1Compliance = serializedObject.FindProperty("_bend1Compliance"); + bend2Compliance = serializedObject.FindProperty("_bend2Compliance"); + plasticYield = serializedObject.FindProperty("_plasticYield"); + plasticCreep = serializedObject.FindProperty("_plasticCreep"); + + aerodynamicsEnabled = serializedObject.FindProperty("_aerodynamicsEnabled"); + drag = serializedObject.FindProperty("_drag"); + lift = serializedObject.FindProperty("_lift"); + } + + public void OnDisable() + { + Tools.hidden = false; + } + + public override void OnInspectorGUI() + { + serializedObject.UpdateIfRequiredOrScript(); + + EditorGUILayout.LabelField("Bones", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(fixRoot); + EditorGUILayout.PropertyField(stretchBones); + EditorGUILayout.PropertyField(ignored); + EditorGUILayout.Space(); + + EditorGUILayout.LabelField("Collisions", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(collisionMaterial, new GUIContent("Collision material")); + EditorGUI.BeginChangeCheck(); + var newCategory = EditorGUILayout.Popup("Collision category", ObiUtils.GetCategoryFromFilter(bone.Filter), ObiUtils.categoryNames); + if (EditorGUI.EndChangeCheck()) + { + foreach (ObiBone t in targets) + { + Undo.RecordObject(t, "Set collision category"); + t.Filter = ObiUtils.MakeFilter(ObiUtils.GetMaskFromFilter(t.Filter), newCategory); + PrefabUtility.RecordPrefabInstancePropertyModifications(t); + } + } + + EditorGUI.BeginChangeCheck(); + var newMask = EditorGUILayout.MaskField("Collides with", ObiUtils.GetMaskFromFilter(bone.Filter), ObiUtils.categoryNames); + if (EditorGUI.EndChangeCheck()) + { + foreach (ObiBone t in targets) + { + Undo.RecordObject(t, "Set collision mask"); + t.Filter = ObiUtils.MakeFilter(newMask, ObiUtils.GetCategoryFromFilter(t.Filter)); + PrefabUtility.RecordPrefabInstancePropertyModifications(t); + } + } + EditorGUILayout.PropertyField(selfCollisions, new GUIContent("Self collisions")); + EditorGUILayout.PropertyField(surfaceCollisions, new GUIContent("Surface-based collisions")); + EditorGUILayout.Space(); + + ObiEditorUtils.DoPropertyGroup(new GUIContent("Particles"), + () => { + EditorGUILayout.PropertyField(mass); + EditorGUILayout.PropertyField(rotationalMass); + EditorGUILayout.PropertyField(radius); + }); + + ObiEditorUtils.DoToggleablePropertyGroup(skinConstraintsEnabled, new GUIContent("Skin Constraints", Resources.Load("Icons/ObiSkinConstraints Icon")), + () => { + EditorGUILayout.PropertyField(skinRadius, new GUIContent("Skin radius")); + EditorGUILayout.PropertyField(skinCompliance, new GUIContent("Skin compliance")); + }); + + ObiEditorUtils.DoToggleablePropertyGroup(stretchShearConstraintsEnabled, new GUIContent("Stretch & Shear Constraints", Resources.Load("Icons/ObiStretchShearConstraints Icon")), + () => { + EditorGUILayout.PropertyField(stretchCompliance, new GUIContent("Stretch compliance")); + EditorGUILayout.PropertyField(shear1Compliance, new GUIContent("Shear compliance X")); + EditorGUILayout.PropertyField(shear2Compliance, new GUIContent("Shear compliance Y")); + }); + + ObiEditorUtils.DoToggleablePropertyGroup(bendTwistConstraintsEnabled, new GUIContent("Bend & Twist Constraints", Resources.Load("Icons/ObiBendTwistConstraints Icon")), + () => { + EditorGUILayout.PropertyField(torsionCompliance, new GUIContent("Torsion compliance")); + EditorGUILayout.PropertyField(bend1Compliance, new GUIContent("Bend compliance X")); + EditorGUILayout.PropertyField(bend2Compliance, new GUIContent("Bend compliance Y")); + EditorGUILayout.PropertyField(plasticYield, new GUIContent("Plastic yield")); + 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(); + + } + + + [DrawGizmo(GizmoType.Selected)] + private static void DrawGizmos(ObiBone actor, GizmoType gizmoType) + { + if (actor.boneBlueprint != null && actor.isLoaded) + { + var color = new Color(1, 1, 1, 0.5f); + var upColor = new Color(0, 1, 0, 1); + + for (int i = 0; i < actor.boneBlueprint.parentIndices.Count; ++i) + { + int parent = actor.boneBlueprint.parentIndices[i]; + if (parent >= 0) + { + var index = actor.solverIndices[parent]; + var nextIndex = actor.solverIndices[i]; + + var pos = actor.GetParticlePosition(index); + var npos = actor.GetParticlePosition(nextIndex); + var or = actor.GetParticleOrientation(index); + var nor = actor.GetParticleOrientation(nextIndex); + var rad = actor.GetParticleMaxRadius(index); + var nrad = actor.GetParticleMaxRadius(nextIndex); + + var up = pos + or * Vector3.up * rad; + var down = pos + or * Vector3.down * rad; + var left = pos + or * Vector3.left * rad; + var right = pos + or * Vector3.right * rad; + + var nup = npos + nor * Vector3.up * nrad; + var ndown = npos + nor * Vector3.down * nrad; + var nleft = npos + nor * Vector3.left * nrad; + var nright = npos + nor * Vector3.right * nrad; + + Handles.color = upColor; + Handles.DrawLine(up, nup); + + Handles.color = color; + Handles.DrawLine(down, ndown); + Handles.DrawLine(left, nleft); + Handles.DrawLine(right, nright); + Handles.DrawWireDisc(npos, nor * Vector3.forward, nrad); + } + } + if (actor.particleCount > 0) + { + var index = actor.solverIndices[0]; + var pos = actor.GetParticlePosition(index); + var or = actor.GetParticleOrientation(index); + var rad = actor.GetParticleMaxRadius(index); + + Handles.DrawWireDisc(pos, or * Vector3.forward, rad); + } + } + } + + } + +} + + diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiBoneEditor.cs.meta b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiBoneEditor.cs.meta new file mode 100644 index 00000000..2f33c8d3 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiBoneEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1f25827f322514e1bb93fd309cd801bf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiDraggableIcon.cs b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiDraggableIcon.cs new file mode 100644 index 00000000..1d41c3b9 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiDraggableIcon.cs @@ -0,0 +1,73 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; + +namespace Obi{ +public class ObiDraggableIcon { + + public static bool Draw(bool selected, int id, ref Vector2 position, Color color){ + + Texture texture = Resources.Load("Dot"); + + int controlID = GUIUtility.GetControlID(id,FocusType.Passive); + + // select vertex on mouse click: + switch (Event.current.GetTypeForControl(controlID)){ + + case EventType.MouseDown: + + Rect area = new Rect (position.x-5, position.y-5, 10, 10); + + if (area.Contains(Event.current.mousePosition)) + { + selected = true; + GUIUtility.hotControl = controlID; + Event.current.Use(); + }else if ((Event.current.modifiers & EventModifiers.Shift) == 0 && (Event.current.modifiers & EventModifiers.Command) == 0){ + + selected = false; + + } + + break; + + case EventType.MouseDrag: + + if (GUIUtility.hotControl == controlID){ + + position = Event.current.mousePosition; + GUI.changed = true; + + Event.current.Use(); + + } + + break; + + case EventType.MouseUp: + + if (GUIUtility.hotControl == controlID){ + + GUIUtility.hotControl = 0; + Event.current.Use(); + + } + + break; + + case EventType.Repaint: + + Color oldColor = GUI.color; + GUI.color = selected ? ObiEditorSettings.GetOrCreateSettings().selectedParticleColor : ObiEditorSettings.GetOrCreateSettings().particleColor; + Rect rect = new Rect (position.x-2, position.y-2, 4, 4); + GUI.Box(rect,EditorGUIUtility.whiteTexture); + GUI.color = oldColor; + + break; + + } + + return selected; + } +} +} diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiDraggableIcon.cs.meta b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiDraggableIcon.cs.meta new file mode 100644 index 00000000..d2449d02 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiDraggableIcon.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c736a38cd50af4bccbd08b83993abbdb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiPathEditor.cs b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiPathEditor.cs new file mode 100644 index 00000000..7056a44e --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiPathEditor.cs @@ -0,0 +1,1241 @@ +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, + RotatePoints, + ScalePoints, + OrientPoints, + InsertPoints, + RemovePoints + } + + ObiPath path; + + Quaternion prevRot = Quaternion.identity; + Vector3 prevScale = Vector3.one; + + PathEditorTool currentTool = PathEditorTool.TranslatePoints; + bool showTangentHandles = true; + bool showThicknessHandles = true; + + public bool needsRepaint = false; + + protected bool[] selectedStatus; + protected int lastSelected = 0; + protected int selectedCount = 0; + protected Vector3 selectionAverage; + protected bool useOrientation = false; + + protected static Color handleColor = new Color(1, 0.55f, 0.1f); + protected GUIContent m_IconContent; + + public override GUIContent toolbarIcon + { + get + { + if (m_IconContent == null) + { + m_IconContent = new GUIContent() + { + image = Resources.Load("EditCurves"), + text = "Obi Path Editor Tool", + tooltip = "Obi Path Editor Tool" + }; + } + return m_IconContent; + } + } + + ObiRopeBlueprintBase blueprint + { + get { return (target as ObiRopeBase).sharedBlueprint as ObiRopeBlueprintBase; } + } + + public void OnEnable() + { + this.useOrientation = target is ObiRod; + selectedStatus = new bool[0]; + PathEditorOverlay.editor = this; + } + + public void ResizeCPArrays() + { + Array.Resize(ref selectedStatus, path.ControlPointCount); + } + + public override void OnToolGUI(EditorWindow window) + { + needsRepaint = false; + + float thicknessScale = blueprint.thickness; + this.path = (target as ObiRopeBase).path; + var matrix = (target as ObiRopeBase).transform.localToWorldMatrix; + + ResizeCPArrays(); + + HandleUtility.AddDefaultControl(GUIUtility.GetControlID("PathEditor".GetHashCode(), FocusType.Passive)); + + Matrix4x4 prevMatrix = Handles.matrix; + Handles.matrix = matrix; + + // Draw control points: + Handles.color = handleColor; + for (int i = 0; i < path.ControlPointCount; ++i) + { + needsRepaint |= DrawControlPoint(i); + } + + // Count selected and calculate average position: + selectionAverage = GetControlPointAverage(out lastSelected, out selectedCount); + + // Draw cp tool handles: + needsRepaint |= SplineCPTools(matrix); + + if (showThicknessHandles) + needsRepaint |= DoThicknessHandles(thicknessScale); + + // Control point selection handle: + needsRepaint |= ObiPathHandles.SplineCPSelector(path, selectedStatus); + + Handles.matrix = prevMatrix; + + // During edit mode, allow to add/remove control points. + if (currentTool == PathEditorTool.InsertPoints) + AddControlPointsMode(matrix); + + if (currentTool == PathEditorTool.RemovePoints) + RemoveControlPointsMode(matrix); + + if (needsRepaint) + window.Repaint(); + + } + + private void AddControlPointsMode(Matrix4x4 matrix) + { + + float mu = ScreenPointToCurveMu(path, Event.current.mousePosition, matrix); + + Vector3 pointOnSpline = matrix.MultiplyPoint3x4(path.points.GetPositionAtMu(path.Closed, mu)); + + float size = HandleUtility.GetHandleSize(pointOnSpline) * 0.12f; + + Ray ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); + Handles.color = Color.green; + Handles.DrawDottedLine(pointOnSpline, ray.origin, 4); + Handles.SphereHandleCap(0, pointOnSpline, Quaternion.identity, size, Event.current.type); + + + if (Event.current.type == EventType.MouseDown && Event.current.modifiers == EventModifiers.None) + { + Undo.RecordObject(blueprint, "Add"); + + int newIndex = path.InsertControlPoint(mu); + if (newIndex >= 0) + { + ResizeCPArrays(); + for (int i = 0; i < selectedStatus.Length; ++i) + selectedStatus[i] = false; + selectedStatus[newIndex] = true; + } + + path.FlushEvents(); + Event.current.Use(); + } + + // Repaint the scene, so that the add control point helpers are updated every frame. + SceneView.RepaintAll(); + + } + + private void RemoveControlPointsMode(Matrix4x4 matrix) + { + + float mu = ScreenPointToCurveMu(path, Event.current.mousePosition, matrix); + + Vector3 pointOnSpline = matrix.MultiplyPoint3x4(path.points.GetPositionAtMu(path.Closed, mu)); + + float size = HandleUtility.GetHandleSize(pointOnSpline) * 0.12f; + + Ray ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); + + Handles.color = Color.red; + Handles.DrawDottedLine(pointOnSpline, ray.origin, 4); + + int index = path.GetClosestControlPointIndex(mu); + Handles.SphereHandleCap(0, matrix.MultiplyPoint3x4(path.points[index].position), Quaternion.identity, size, Event.current.type); + + if (Event.current.type == EventType.MouseDown && Event.current.modifiers == EventModifiers.None && index >= 0 && path.ControlPointCount > 2) + { + Undo.RecordObject(blueprint, "Remove"); + + path.RemoveControlPoint(index); + ResizeCPArrays(); + for (int i = 0; i < selectedStatus.Length; ++i) + selectedStatus[i] = false; + + path.FlushEvents(); + Event.current.Use(); + } + + // Repaint the scene, so that the add control point helpers are updated every frame. + SceneView.RepaintAll(); + + } + + protected bool DrawControlPoint(int i) + { + bool repaint = false; + var wp = path.points[i]; + float size = HandleUtility.GetHandleSize(wp.position) * 0.04f; + + if (selectedStatus[i] && showTangentHandles) + { + + Handles.color = handleColor; + + if (!(i == 0 && !path.Closed)) + { + Vector3 tangentPosition = wp.inTangentEndpoint; + + if (Event.current.type == EventType.Repaint) + Handles.DrawDottedLine(tangentPosition, wp.position, 2); + + EditorGUI.BeginChangeCheck(); + Handles.DotHandleCap(0, tangentPosition, Quaternion.identity, size, Event.current.type); + Vector3 newTangent = Handles.PositionHandle(tangentPosition, Quaternion.identity); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(blueprint, "Modify tangent"); + wp.SetInTangentEndpoint(newTangent); + path.points[i] = wp; + path.FlushEvents(); + repaint = true; + } + } + + if (!(i == path.ControlPointCount - 1 && !path.Closed)) + { + Vector3 tangentPosition = wp.outTangentEndpoint; + + if (Event.current.type == EventType.Repaint) + Handles.DrawDottedLine(tangentPosition, wp.position, 2); + + EditorGUI.BeginChangeCheck(); + Handles.DotHandleCap(0, tangentPosition, Quaternion.identity, size, Event.current.type); + Vector3 newTangent = Handles.PositionHandle(tangentPosition, Quaternion.identity); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(blueprint, "Modify tangent"); + wp.SetOutTangentEndpoint(newTangent); + path.points[i] = wp; + path.FlushEvents(); + repaint = true; + } + } + } + + if (Event.current.type == EventType.Repaint) + { + + Handles.color = selectedStatus[i] ? handleColor : Color.white; + Vector3 pos = wp.position; + + if (currentTool == PathEditorTool.OrientPoints) + { + Handles.ArrowHandleCap(0, pos, Quaternion.LookRotation(path.normals[i]), HandleUtility.GetHandleSize(pos), EventType.Repaint); + } + + Handles.SphereHandleCap(0, pos, Quaternion.identity, size * 3, EventType.Repaint); + + } + return repaint; + } + + protected Vector3 GetControlPointAverage(out int lastSelected, out int selectedCount) + { + + lastSelected = -1; + selectedCount = 0; + Vector3 averagePos = Vector3.zero; + + // Find center of all selected control points: + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + + averagePos += path.points[i].position; + selectedCount++; + lastSelected = i; + + } + } + if (selectedCount > 0) + averagePos /= selectedCount; + return averagePos; + + } + + protected bool SplineCPTools(Matrix4x4 matrix) + { + bool repaint = false; + + // Calculate handle rotation, for local or world pivot modes. + Quaternion handleRotation = Tools.pivotRotation == PivotRotation.Local ? Quaternion.identity : Quaternion.Inverse(matrix.rotation); + + // Reset initial handle rotation/orientation after using a tool: + if (GUIUtility.hotControl == 0) + { + + prevRot = handleRotation; + prevScale = Vector3.one; + + if (selectedCount == 1 && Tools.pivotRotation == PivotRotation.Local && currentTool == PathEditorTool.OrientPoints) + { + //prevRot = Quaternion.LookRotation(GetNormal(lastSelected)); + } + } + + // Transform handles: + if (selectedCount > 0) + { + + if (useOrientation && currentTool == PathEditorTool.OrientPoints) + { + repaint |= OrientTool(selectionAverage, handleRotation); + } + else + { + switch (currentTool) + { + case PathEditorTool.TranslatePoints: + { + repaint |= MoveTool(selectionAverage, handleRotation); + } + break; + + case PathEditorTool.ScalePoints: + { + repaint |= ScaleTool(selectionAverage, handleRotation); + } + break; + + case PathEditorTool.RotatePoints: + { + repaint |= RotateTool(selectionAverage, handleRotation); + } + break; + } + } + } + return repaint; + } + + protected bool MoveTool(Vector3 handlePosition, Quaternion handleRotation) + { + + EditorGUI.BeginChangeCheck(); + Vector3 newPos = Handles.PositionHandle(handlePosition, handleRotation); + if (EditorGUI.EndChangeCheck()) + { + + Undo.RecordObject(blueprint, "Move control point"); + + Vector3 delta = newPos - handlePosition; + + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + var wp = path.points[i]; + wp.Transform(delta, Quaternion.identity, Vector3.one); + path.points[i] = wp; + } + } + + path.FlushEvents(); + return true; + } + return false; + } + + protected bool ScaleTool(Vector3 handlePosition, Quaternion handleRotation) + { + + EditorGUI.BeginChangeCheck(); + Vector3 scale = Handles.ScaleHandle(prevScale, handlePosition, handleRotation, HandleUtility.GetHandleSize(handlePosition)); + + if (EditorGUI.EndChangeCheck()) + { + + Vector3 deltaScale = new Vector3(scale.x / prevScale.x, scale.y / prevScale.y, scale.z / prevScale.z); + prevScale = scale; + + Undo.RecordObject(blueprint, "Scale control point"); + + if (Tools.pivotMode == PivotMode.Center && selectedCount > 1) + { + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + var wp = path.points[i]; + Vector3 newPos = handlePosition + Vector3.Scale(wp.position - handlePosition, deltaScale); + wp.Transform(newPos - wp.position, Quaternion.identity, Vector3.one); + path.points[i] = wp; + } + } + } + else + { + // Scale all handles of selected control points relative to their control point: + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + var wp = path.points[i]; + wp.Transform(Vector3.zero, Quaternion.identity, deltaScale); + path.points[i] = wp; + } + } + } + + path.FlushEvents(); + return true; + } + return false; + } + + protected bool RotateTool(Vector3 handlePosition, Quaternion handleRotation) + { + + EditorGUI.BeginChangeCheck(); + + // TODO: investigate weird rotation gizmo: + Quaternion newRotation = Handles.RotationHandle(prevRot, handlePosition); + + if (EditorGUI.EndChangeCheck()) + { + + Quaternion delta = newRotation * Quaternion.Inverse(prevRot); + prevRot = newRotation; + + Undo.RecordObject(blueprint, "Rotate control point"); + + if (Tools.pivotMode == PivotMode.Center && selectedCount > 1) + { + + // Rotate all selected control points around their average: + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + var wp = path.points[i]; + Vector3 newPos = handlePosition + delta * (wp.position - handlePosition); + wp.Transform(newPos - wp.position, Quaternion.identity, Vector3.one); + path.points[i] = wp; + } + } + + } + else + { + + // Rotate all handles of selected control points around their control point: + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + var wp = path.points[i]; + wp.Transform(Vector3.zero, delta, Vector3.one); + path.points[i] = wp; + } + } + } + + path.FlushEvents(); + return true; + } + return false; + } + + protected bool OrientTool(Vector3 averagePos, Quaternion pivotRotation) + { + + EditorGUI.BeginChangeCheck(); + Quaternion newRotation = Handles.RotationHandle(prevRot, averagePos); + + if (EditorGUI.EndChangeCheck()) + { + + Quaternion delta = newRotation * Quaternion.Inverse(prevRot); + prevRot = newRotation; + + Undo.RecordObject(blueprint, "Orient control point"); + + // Rotate all selected control points around their average: + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + path.normals[i] = delta * path.normals[i]; + } + } + + path.FlushEvents(); + return true; + } + return false; + } + + + protected bool DoThicknessHandles(float scale) + { + Color oldColor = Handles.color; + Handles.color = handleColor; + + EditorGUI.BeginChangeCheck(); + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + Vector3 position = path.points[i].position; + + var tangent = path.points.GetTangent(i); + if (!tangent.Equals(Vector3.zero)) + { + Quaternion orientation = Quaternion.LookRotation(tangent); + + float offset = 0.05f; + float thickness = (path.thicknesses[i] * scale) + offset; + + EditorGUI.BeginChangeCheck(); + thickness = DoRadiusHandle(orientation, position, thickness); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(blueprint, "Change control point thickness"); + path.thicknesses[i] = Mathf.Max(0, (thickness - offset) / scale); + path.FlushEvents(); + return true; + } + } + } + } + Handles.color = oldColor; + + return false; + } + + public void DrawToolPanel() + { + + DrawToolButtons(); + + DrawControlPointInspector(); + + } + + private void DrawToolButtons() + { + GUILayout.BeginHorizontal(); + + EditorGUI.BeginChangeCheck(); + GUILayout.Toggle(currentTool == PathEditorTool.TranslatePoints, new GUIContent(Resources.Load("TranslateControlPoint"), "Translate CPs"), "Button", GUILayout.MaxHeight(24), GUILayout.Width(38)); + if (EditorGUI.EndChangeCheck()) + { + currentTool = PathEditorTool.TranslatePoints; + } + + EditorGUI.BeginChangeCheck(); + GUILayout.Toggle(currentTool == PathEditorTool.RotatePoints, new GUIContent(Resources.Load("RotateControlPoint"), "Rotate CPs"), "Button", GUILayout.MaxHeight(24), GUILayout.Width(38)); + if (EditorGUI.EndChangeCheck()) + { + currentTool = PathEditorTool.RotatePoints; + } + + EditorGUI.BeginChangeCheck(); + GUILayout.Toggle(currentTool == PathEditorTool.ScalePoints, new GUIContent(Resources.Load("ScaleControlPoint"), "Scale CPs"), "Button", GUILayout.MaxHeight(24), GUILayout.Width(38)); + if (EditorGUI.EndChangeCheck()) + { + currentTool = PathEditorTool.ScalePoints; + } + + EditorGUI.BeginChangeCheck(); + GUILayout.Toggle(currentTool == PathEditorTool.InsertPoints, new GUIContent(Resources.Load("AddControlPoint"), "Add CPs"), "Button", GUILayout.MaxHeight(24), GUILayout.Width(38)); + if (EditorGUI.EndChangeCheck()) + { + currentTool = PathEditorTool.InsertPoints; + } + + EditorGUI.BeginChangeCheck(); + GUILayout.Toggle(currentTool == PathEditorTool.RemovePoints, new GUIContent(Resources.Load("RemoveControlPoint"), "Remove CPs"), "Button", GUILayout.MaxHeight(24), GUILayout.Width(38)); + if (EditorGUI.EndChangeCheck()) + { + currentTool = PathEditorTool.RemovePoints; + } + + EditorGUI.BeginChangeCheck(); + bool closed = GUILayout.Toggle(path.Closed, new GUIContent(Resources.Load("OpenCloseCurve"), "Open/Close the path"), "Button", GUILayout.MaxHeight(24), GUILayout.Width(38)); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(blueprint, "Open/close path"); + path.Closed = closed; + path.FlushEvents(); + needsRepaint = true; + } + + if (useOrientation) + { + EditorGUI.BeginChangeCheck(); + GUILayout.Toggle(currentTool == PathEditorTool.OrientPoints, new GUIContent(Resources.Load("OrientControlPoint"), "Orientation tool"), "Button", GUILayout.MaxHeight(24), GUILayout.Width(38)); + if (EditorGUI.EndChangeCheck()) + { + currentTool = PathEditorTool.OrientPoints; + } + } + + showTangentHandles = GUILayout.Toggle(showTangentHandles, new GUIContent(Resources.Load("ShowTangentHandles"), "Show tangent handles"), "Button", GUILayout.MaxHeight(24), GUILayout.Width(38)); + showThicknessHandles = GUILayout.Toggle(showThicknessHandles, new GUIContent(Resources.Load("ShowThicknessHandles"), "Show thickness handles"), "Button", GUILayout.MaxHeight(24), GUILayout.Width(38)); + + GUILayout.EndHorizontal(); + } + + private void DrawPositionField(Rect rect, string label, int index) + { + EditorGUI.showMixedValue = false; + float pos = 0; + bool firstSelected = true; + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + if (firstSelected) + { + pos = path.points[i].position[index]; + firstSelected = false; + } + else if (!Mathf.Approximately(pos,path.points[i].position[index])) + { + EditorGUI.showMixedValue = true; + break; + } + } + } + + EditorGUI.BeginChangeCheck(); + float oldLabelWidth = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = 10; + pos = EditorGUI.FloatField(rect, label, pos); + EditorGUIUtility.labelWidth = oldLabelWidth; + EditorGUI.showMixedValue = false; + if (EditorGUI.EndChangeCheck()) + { + + Undo.RecordObject(blueprint, "Change control points position"); + + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + var wp = path.points[i]; + wp.position[index] = pos; + path.points[i] = wp; + } + } + path.FlushEvents(); + needsRepaint = true; + } + } + + private void DrawInTangentField(Rect rect, string label, int index) + { + EditorGUI.showMixedValue = false; + float pos = 0; + bool firstSelected = true; + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + if (firstSelected) + { + pos = path.points[i].inTangent[index]; + firstSelected = false; + } + else if (!Mathf.Approximately(pos, path.points[i].inTangent[index])) + { + EditorGUI.showMixedValue = true; + break; + } + } + } + + EditorGUI.BeginChangeCheck(); + float oldLabelWidth = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = 10; + pos = EditorGUI.FloatField(rect, label, pos); + EditorGUIUtility.labelWidth = oldLabelWidth; + EditorGUI.showMixedValue = false; + if (EditorGUI.EndChangeCheck()) + { + + Undo.RecordObject(blueprint, "Change control points tangent"); + + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + var wp = path.points[i]; + var newInTangent = wp.inTangent; + newInTangent[index] = pos; + wp.SetInTangent(newInTangent); + path.points[i] = wp; + } + } + path.FlushEvents(); + needsRepaint = true; + } + } + + private void DrawOutTangentField(Rect rect, string label, int index) + { + EditorGUI.showMixedValue = false; + float pos = 0; + bool firstSelected = true; + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + if (firstSelected) + { + pos = path.points[i].outTangent[index]; + firstSelected = false; + } + else if (!Mathf.Approximately(pos, path.points[i].outTangent[index])) + { + EditorGUI.showMixedValue = true; + break; + } + } + } + + EditorGUI.BeginChangeCheck(); + float oldLabelWidth = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = 10; + pos = EditorGUI.FloatField(rect, label, pos); + EditorGUIUtility.labelWidth = oldLabelWidth; + EditorGUI.showMixedValue = false; + if (EditorGUI.EndChangeCheck()) + { + + Undo.RecordObject(blueprint, "Change control points tangent"); + + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + var wp = path.points[i]; + var newOutTangent = wp.outTangent; + newOutTangent[index] = pos; + wp.SetOutTangent(newOutTangent); + path.points[i] = wp; + } + } + path.FlushEvents(); + needsRepaint = true; + } + } + + private void DrawControlPointInspector() + { + + GUI.enabled = selectedCount > 0; + + bool wideMode = EditorGUIUtility.wideMode; + EditorGUIUtility.wideMode = true; + EditorGUIUtility.labelWidth = 100; + + EditorGUILayout.BeginVertical(); + + GUILayout.Box("", ObiEditorUtils.GetSeparatorLineStyle()); + + // position: + var rect = EditorGUILayout.GetControlRect(); + rect = EditorGUI.PrefixLabel(rect, GUIUtility.GetControlID(FocusType.Passive), new GUIContent("Position")); + rect.width /= 3.0f; + DrawPositionField(rect,"X",0); rect.x += rect.width; + DrawPositionField(rect,"Y",1); rect.x += rect.width; + DrawPositionField(rect,"Z",2); rect.x += rect.width; + + // in tangent: + rect = EditorGUILayout.GetControlRect(); + rect = EditorGUI.PrefixLabel(rect, GUIUtility.GetControlID(FocusType.Passive), new GUIContent("In Tangent")); + rect.width /= 3.0f; + DrawInTangentField(rect, "X", 0); rect.x += rect.width; + DrawInTangentField(rect, "Y", 1); rect.x += rect.width; + DrawInTangentField(rect, "Z", 2); rect.x += rect.width; + + // out tangent: + rect = EditorGUILayout.GetControlRect(); + rect = EditorGUI.PrefixLabel(rect, GUIUtility.GetControlID(FocusType.Passive), new GUIContent("Out Tangent")); + rect.width /= 3.0f; + DrawOutTangentField(rect, "X", 0); rect.x += rect.width; + DrawOutTangentField(rect, "Y", 1); rect.x += rect.width; + DrawOutTangentField(rect, "Z", 2); rect.x += rect.width; + + // tangent mode: + EditorGUI.showMixedValue = false; + var mode = ObiWingedPoint.TangentMode.Free; + bool firstSelected = true; + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + if (firstSelected) + { + mode = path.points[i].tangentMode; + firstSelected = false; + } + else if (mode != path.points[i].tangentMode) + { + EditorGUI.showMixedValue = true; + break; + } + } + } + + EditorGUI.BeginChangeCheck(); + var newMode = (ObiWingedPoint.TangentMode)EditorGUILayout.EnumPopup("Tangent mode", mode, GUILayout.MinWidth(94)); + EditorGUI.showMixedValue = false; + if (EditorGUI.EndChangeCheck()) + { + + Undo.RecordObject(blueprint, "Change control points mode"); + + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + var wp = path.points[i]; + wp.tangentMode = newMode; + path.points[i] = wp; + } + } + path.FlushEvents(); + needsRepaint = true; + } + + // thickness: + EditorGUI.showMixedValue = false; + float thickness = 0; + firstSelected = true; + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + if (firstSelected) + { + thickness = path.thicknesses[i]; + firstSelected = false; + } + else if (!Mathf.Approximately(thickness, path.thicknesses[i])) + { + EditorGUI.showMixedValue = true; + break; + } + } + } + + EditorGUI.BeginChangeCheck(); + thickness = EditorGUILayout.FloatField("Thickness", thickness, GUILayout.MinWidth(94)); + EditorGUI.showMixedValue = false; + if (EditorGUI.EndChangeCheck()) + { + + Undo.RecordObject(blueprint, "Change control point thickness"); + + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + path.thicknesses[i] = Mathf.Max(0, thickness); + } + path.FlushEvents(); + needsRepaint = true; + } + + // mass: + EditorGUI.showMixedValue = false; + float mass = 0; + firstSelected = true; + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + if (firstSelected) + { + mass = path.masses[i]; + firstSelected = false; + } + else if (!Mathf.Approximately(mass, path.masses[i])) + { + EditorGUI.showMixedValue = true; + break; + } + } + } + + EditorGUI.BeginChangeCheck(); + mass = EditorGUILayout.FloatField("Mass", mass, GUILayout.MinWidth(94)); + EditorGUI.showMixedValue = false; + if (EditorGUI.EndChangeCheck()) + { + + Undo.RecordObject(blueprint, "Change control point mass"); + + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + path.masses[i] = mass; + } + path.FlushEvents(); + needsRepaint = true; + } + + if (useOrientation) + { + // rotational mass: + EditorGUI.showMixedValue = false; + float rotationalMass = 0; + firstSelected = true; + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + if (firstSelected) + { + rotationalMass = path.rotationalMasses[i]; + firstSelected = false; + } + else if (!Mathf.Approximately(rotationalMass, path.rotationalMasses[i])) + { + EditorGUI.showMixedValue = true; + break; + } + } + } + + EditorGUI.BeginChangeCheck(); + rotationalMass = EditorGUILayout.FloatField("Rotational mass", rotationalMass, GUILayout.MinWidth(94)); + EditorGUI.showMixedValue = false; + if (EditorGUI.EndChangeCheck()) + { + + Undo.RecordObject(blueprint, "Change control point rotational mass"); + + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + path.rotationalMasses[i] = rotationalMass; + } + path.FlushEvents(); + needsRepaint = true; + } + } + + // category: + EditorGUI.showMixedValue = false; + int category = 0; + firstSelected = true; + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + if (firstSelected) + { + category = ObiUtils.GetCategoryFromFilter(path.filters[i]); + firstSelected = false; + } + else if (!Mathf.Approximately(category, ObiUtils.GetCategoryFromFilter(path.filters[i]))) + { + EditorGUI.showMixedValue = true; + break; + } + } + } + + EditorGUI.BeginChangeCheck(); + category = EditorGUILayout.Popup("Category", category, ObiUtils.categoryNames, GUILayout.MinWidth(94)); + EditorGUI.showMixedValue = false; + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(blueprint, "Change control point category"); + + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + path.filters[i] = ObiUtils.MakeFilter(ObiUtils.GetMaskFromFilter(path.filters[i]),category); + } + path.FlushEvents(); + needsRepaint = true; + } + + // mask: + EditorGUI.showMixedValue = false; + int mask = 0; + firstSelected = true; + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + if (firstSelected) + { + mask = ObiUtils.GetMaskFromFilter(path.filters[i]); + firstSelected = false; + } + else if (!Mathf.Approximately(mask, ObiUtils.GetMaskFromFilter(path.filters[i]))) + { + EditorGUI.showMixedValue = true; + break; + } + } + } + + EditorGUI.BeginChangeCheck(); + mask = EditorGUILayout.MaskField("Collides with", mask, ObiUtils.categoryNames, GUILayout.MinWidth(94)); + EditorGUI.showMixedValue = false; + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(blueprint, "Change control point mask"); + + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + path.filters[i] = ObiUtils.MakeFilter(mask,ObiUtils.GetCategoryFromFilter(path.filters[i])); + } + path.FlushEvents(); + needsRepaint = true; + } + + // color: + EditorGUI.showMixedValue = false; + Color color = Color.white; + firstSelected = true; + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + if (firstSelected) + { + color = path.colors[i]; + firstSelected = false; + } + else if (color != path.colors[i]) + { + EditorGUI.showMixedValue = true; + break; + } + } + } + + EditorGUI.BeginChangeCheck(); + color = EditorGUILayout.ColorField(new GUIContent("Color"), color, true, true, true, GUILayout.MinWidth(94)); + EditorGUI.showMixedValue = false; + if (EditorGUI.EndChangeCheck()) + { + + Undo.RecordObject(blueprint, "Change control point color"); + + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + path.colors[i] = color; + } + path.FlushEvents(); + needsRepaint = true; + } + + // name: + EditorGUI.showMixedValue = false; + string cpname = ""; + firstSelected = true; + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + { + if (firstSelected) + { + cpname = path.GetName(i); + firstSelected = false; + } + else if (cpname != path.GetName(i)) + { + EditorGUI.showMixedValue = true; + break; + } + } + } + + EditorGUI.BeginChangeCheck(); + cpname = EditorGUILayout.DelayedTextField("Name", cpname, GUILayout.MinWidth(94)); + EditorGUI.showMixedValue = false; + if (EditorGUI.EndChangeCheck()) + { + + Undo.RecordObject(blueprint, "Change control point name"); + + for (int i = 0; i < path.ControlPointCount; ++i) + { + if (selectedStatus[i]) + path.SetName(i, cpname); + } + path.FlushEvents(); + needsRepaint = true; + } + + + EditorGUILayout.EndVertical(); + + EditorGUIUtility.wideMode = wideMode; + + GUI.enabled = true; + } + + internal static float DoRadiusHandle(Quaternion rotation, Vector3 position, float radius) + { + Vector3[] vector3Array; + + Vector3 camToPosition; + if (Camera.current.orthographic) + { + camToPosition = Camera.current.transform.forward; + Handles.DrawWireDisc(position, camToPosition, radius); + + vector3Array = new Vector3[4] + { + Camera.current.transform.right, + Camera.current.transform.up, + -Camera.current.transform.right, + -Camera.current.transform.up, + }; + + } + else + { + camToPosition = position - Camera.current.transform.position; + Handles.DrawWireDisc(position, rotation * Vector3.forward, radius); + + vector3Array = new Vector3[4] + { + rotation * Vector3.right, + rotation * Vector3.up, + rotation * -Vector3.right, + rotation * -Vector3.up, + }; + } + + for (int index = 0; index < 4; ++index) + { + int controlId = GUIUtility.GetControlID("ObiPathThicknessHandle".GetHashCode(), FocusType.Passive); + Vector3 position1 = position + radius * vector3Array[index]; + bool changed = GUI.changed; + GUI.changed = false; + Vector3 a = Handles.Slider(controlId, position1, vector3Array[index], HandleUtility.GetHandleSize(position1) * 0.03f, Handles.DotHandleCap, 0.0f); + if (GUI.changed) + radius = Vector3.Distance(a, position); + GUI.changed |= changed; + } + + return radius; + } + + public static float ScreenPointToCurveMu(ObiPath path, Vector2 screenPoint, Matrix4x4 referenceFrame, int samples = 30) + { + + if (path.ControlPointCount >= 2) + { + + samples = Mathf.Max(1, samples); + float step = 1 / (float)samples; + + float closestMu = 0; + float minDistance = float.MaxValue; + + for (int k = 0; k < path.GetSpanCount(); ++k) + { + int nextCP = (k + 1) % path.ControlPointCount; + + var wp1 = path.points[k]; + var wp2 = path.points[nextCP]; + + Vector3 _p = referenceFrame.MultiplyPoint3x4(wp1.position); + Vector3 p = referenceFrame.MultiplyPoint3x4(wp1.outTangentEndpoint); + Vector3 p_ = referenceFrame.MultiplyPoint3x4(wp2.inTangentEndpoint); + Vector3 p__ = referenceFrame.MultiplyPoint3x4(wp2.position); + + Vector2 lastPoint = HandleUtility.WorldToGUIPoint(path.m_Points.Evaluate(_p, p, p_, p__, 0)); + for (int i = 1; i <= samples; ++i) + { + + Vector2 currentPoint = HandleUtility.WorldToGUIPoint(path.m_Points.Evaluate(_p, p, p_, p__, i * step)); + + float mu; + float distance = Vector2.SqrMagnitude((Vector2)ObiUtils.ProjectPointLine(lastPoint, currentPoint, screenPoint, out mu) - screenPoint); + + if (distance < minDistance) + { + minDistance = distance; + closestMu = (k + (i - 1) * step + mu / samples) / (float)path.GetSpanCount(); + } + lastPoint = currentPoint; + } + + } + + return closestMu; + + } + else + { + Debug.LogWarning("Curve needs at least 2 control points to be defined."); + } + return 0; + + } + + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiPathEditor.cs.meta b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiPathEditor.cs.meta new file mode 100644 index 00000000..32c490bc --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiPathEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0cb694bcadb6a4909b593111507e1eb3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiPathHandles.cs b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiPathHandles.cs new file mode 100644 index 00000000..2a0bc1b6 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiPathHandles.cs @@ -0,0 +1,271 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + + public class ObiPathHandles + { + + static int splineSelectorHash = "ObiPathSelectorHash".GetHashCode(); + const int minSelectionDistance = 5; + + static Vector2 startPos; + static Vector2 currentPos; + static bool dragging = false; + static Rect marquee; + + public static bool SplineCPSelector(ObiPath path, bool[] selectionStatus) + { + + int controlID = GUIUtility.GetControlID(splineSelectorHash, FocusType.Passive); + int selectedCPIndex = -1; + bool selectionStatusChanged = false; + + // select vertex on mouse click: + switch (Event.current.GetTypeForControl(controlID)) + { + case EventType.Layout: + case EventType.MouseMove: + + 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) + { + minSqrDistance = sqrDistance; + } + + } + HandleUtility.AddControl(controlID, Mathf.Sqrt(minSqrDistance)); + + break; + + case EventType.MouseDown: + + marquee.Set(0, 0, 0, 0); + startPos = Event.current.mousePosition; + + if (Event.current.button == 0) + { + + 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; + } + } + + break; + + case EventType.MouseDrag: + + if (Event.current.button == 0 && (Event.current.modifiers & EventModifiers.Alt) == 0) + { + currentPos = Event.current.mousePosition; + if (!dragging && Vector2.Distance(startPos, currentPos) > 5) + { + dragging = true; + } + + if (dragging) + { + GUIUtility.hotControl = controlID; + Event.current.Use(); + } + + //update marquee rect: + float left = Mathf.Min(startPos.x, currentPos.x); + float right = Mathf.Max(startPos.x, currentPos.x); + float bottom = Mathf.Min(startPos.y, currentPos.y); + float top = Mathf.Max(startPos.y, currentPos.y); + + marquee = new Rect(left, bottom, right - left, top - bottom); + + } + + break; + + case EventType.MouseUp: + + if (GUIUtility.hotControl == controlID) + { + + dragging = false; + + for (int i = 0; i < path.ControlPointCount; i++) + { + + // get particle position in gui space: + Vector2 pos = HandleUtility.WorldToGUIPoint(path.points[i].position); + + if (pos.x > marquee.xMin && pos.x < marquee.xMax && pos.y > marquee.yMin && pos.y < marquee.yMax) + { + selectionStatus[i] = true; + selectionStatusChanged = true; + } + + } + + GUIUtility.hotControl = 0; + Event.current.Use(); + } + + break; + + case EventType.Repaint: + + if (dragging) + { + GUISkin oldSkin = GUI.skin; + GUI.skin = EditorGUIUtility.GetBuiltinSkin(EditorSkin.Scene); + Handles.BeginGUI(); + GUI.Box(new Rect(marquee.xMin, marquee.yMin, marquee.width, marquee.height), ""); + Handles.EndGUI(); + GUI.skin = oldSkin; + } + + break; + + } + + return selectionStatusChanged; + } + + private static void DrawControlPointArcs(ObiPath path, float thicknessScale) + { + for (int i = 0; i < path.ControlPointCount; ++i) + { + Vector3 position = path.points[i].position; + Vector3 tangent = path.points.GetTangent(i); + Vector3 right = Vector3.Cross(tangent, path.normals[i]).normalized; + float thickness = path.thicknesses[i] * thicknessScale + 0.05f; + + Handles.DrawWireArc(position, tangent, right, -180, thickness); + } + } + + private static void DrawPathPolylines(Vector3[] samples, Vector3[] leftSamples, Vector3[] rightSamples, Vector3[] upSamples, bool drawOrientation) + { + Handles.DrawPolyLine(samples); + if (drawOrientation) + { + Handles.DrawPolyLine(leftSamples); + Handles.DrawPolyLine(upSamples); + Handles.DrawPolyLine(rightSamples); + } + } + + public static void DrawPathHandle(ObiPath path, Matrix4x4 referenceFrame, float thicknessScale, int resolution, bool drawOrientation = true) + { + + if (path == null || path.GetSpanCount() == 0) return; + + Matrix4x4 prevMatrix = Handles.matrix; + Handles.matrix = referenceFrame; + + // Draw the curve: + int curveSegments = path.GetSpanCount() * resolution; + Vector3[] samples = new Vector3[curveSegments + 1]; + Vector3[] leftSamples = new Vector3[curveSegments + 1]; + Vector3[] rightSamples = new Vector3[curveSegments + 1]; + Vector3[] upSamples = new Vector3[curveSegments + 1]; + + for (int i = 0; i <= curveSegments; ++i) + { + + float mu = i / (float)curveSegments; + samples[i] = path.points.GetPositionAtMu(path.Closed,mu); + + if (drawOrientation) + { + Vector3 tangent = path.points.GetTangentAtMu(path.Closed,mu); + Vector3 right = Vector3.Cross(tangent, path.normals.GetAtMu(path.Closed,mu)).normalized; + Vector3 up = Vector3.Cross(right, tangent).normalized; + float thickness = path.thicknesses.GetAtMu(path.Closed,mu) * thicknessScale + 0.05f; + + leftSamples[i] = samples[i] - right * thickness; + rightSamples[i] = samples[i] + right * thickness; + upSamples[i] = samples[i] + up * thickness; + + if (i % 5 == 0) + { + Handles.DrawLine(leftSamples[i], rightSamples[i]); + Handles.DrawLine(samples[i], samples[i] + up * thickness); + } + } + } + + if (drawOrientation) + DrawControlPointArcs(path, thicknessScale); + + DrawPathPolylines(samples, leftSamples, rightSamples, upSamples, drawOrientation); + DrawPathPolylines(samples, leftSamples, rightSamples, upSamples, drawOrientation); + + Handles.matrix = prevMatrix; + } + + + } +} + diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiPathHandles.cs.meta b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiPathHandles.cs.meta new file mode 100644 index 00000000..8df16e49 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiPathHandles.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f3c12ceb831344c47af02f0d6bf73de7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiPathSmootherEditor.cs b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiPathSmootherEditor.cs new file mode 100644 index 00000000..068bc64a --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiPathSmootherEditor.cs @@ -0,0 +1,37 @@ +using UnityEditor; +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + + [CustomEditor(typeof(ObiPathSmoother), true), CanEditMultipleObjects] + public class ObiPathSmootherEditor : Editor + { + + ObiPathSmoother shape; + + public void OnEnable() + { + shape = (ObiPathSmoother)target; + } + + public override void OnInspectorGUI() + { + + serializedObject.UpdateIfRequiredOrScript(); + + Editor.DrawPropertiesExcluding(serializedObject, "m_Script"); + + // Apply changes to the serializedProperty + if (GUI.changed) + serializedObject.ApplyModifiedProperties(); + + } + + } + +} + diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiPathSmootherEditor.cs.meta b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiPathSmootherEditor.cs.meta new file mode 100644 index 00000000..4b3fca50 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiPathSmootherEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a01b6dc95e7284e2583513863858d670 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRodEditor.cs b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRodEditor.cs new file mode 100644 index 00000000..f8e0ad88 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRodEditor.cs @@ -0,0 +1,216 @@ +using UnityEditor; +using UnityEditor.EditorTools; +using UnityEditorInternal; +using UnityEngine; +using System; +using System.Collections.Generic; +using System.Linq; + + +namespace Obi +{ + + [CustomEditor(typeof(ObiRod))] + public class ObiRodEditor : Editor + { + [MenuItem("GameObject/3D Object/Obi/Obi Rod", false, 301)] + 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); + } + + ObiRod actor; + + SerializedProperty rodBlueprint; + + SerializedProperty collisionMaterial; + SerializedProperty selfCollisions; + SerializedProperty surfaceCollisions; + + SerializedProperty stretchShearConstraintsEnabled; + SerializedProperty stretchCompliance; + SerializedProperty shear1Compliance; + SerializedProperty shear2Compliance; + + SerializedProperty bendTwistConstraintsEnabled; + SerializedProperty torsionCompliance; + SerializedProperty bend1Compliance; + SerializedProperty bend2Compliance; + SerializedProperty plasticYield; + SerializedProperty plasticCreep; + + SerializedProperty aerodynamicsEnabled; + SerializedProperty drag; + SerializedProperty lift; + + SerializedProperty chainConstraintsEnabled; + SerializedProperty tightness; + + GUIStyle editLabelStyle; + + public void OnEnable() + { + actor = (ObiRod)target; + + rodBlueprint = serializedObject.FindProperty("m_RodBlueprint"); + + collisionMaterial = serializedObject.FindProperty("m_CollisionMaterial"); + selfCollisions = serializedObject.FindProperty("m_SelfCollisions"); + surfaceCollisions = serializedObject.FindProperty("m_SurfaceCollisions"); + + stretchShearConstraintsEnabled = serializedObject.FindProperty("_stretchShearConstraintsEnabled"); + stretchCompliance = serializedObject.FindProperty("_stretchCompliance"); + shear1Compliance = serializedObject.FindProperty("_shear1Compliance"); + shear2Compliance = serializedObject.FindProperty("_shear2Compliance"); + + bendTwistConstraintsEnabled = serializedObject.FindProperty("_bendTwistConstraintsEnabled"); + torsionCompliance = serializedObject.FindProperty("_torsionCompliance"); + bend1Compliance = serializedObject.FindProperty("_bend1Compliance"); + bend2Compliance = serializedObject.FindProperty("_bend2Compliance"); + 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"); + } + + private void DoEditButton() + { + using (new EditorGUI.DisabledScope(actor.rodBlueprint == null)) + { + EditorGUILayout.BeginHorizontal(); + GUILayout.Space(EditorGUIUtility.labelWidth); + EditorGUI.BeginChangeCheck(); + bool edit = GUILayout.Toggle(ToolManager.activeToolType == typeof(ObiPathEditor), new GUIContent(Resources.Load("EditCurves")), "Button", GUILayout.MaxWidth(36), GUILayout.MaxHeight(24)); + EditorGUILayout.LabelField("Edit path", editLabelStyle, GUILayout.ExpandHeight(true), GUILayout.MaxHeight(24)); + if (EditorGUI.EndChangeCheck()) + { + if (edit) + ToolManager.SetActiveTool(); + else + ToolManager.RestorePreviousPersistentTool(); + + SceneView.RepaintAll(); + } + EditorGUILayout.EndHorizontal(); + } + } + + public override void OnInspectorGUI() + { + if (editLabelStyle == null) + { + editLabelStyle = new GUIStyle(GUI.skin.label); + editLabelStyle.alignment = TextAnchor.MiddleLeft; + } + + serializedObject.UpdateIfRequiredOrScript(); + + if (actor.rodBlueprint != null && actor.rodBlueprint.path.ControlPointCount < 2) + { + actor.rodBlueprint.GenerateImmediate(); + } + + 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) + { + (t as ObiRod).RemoveFromSolver(); + (t as ObiRod).ClearState(); + } + serializedObject.ApplyModifiedProperties(); + foreach (var t in targets) + (t as ObiRod).AddToSolver(); + } + + GUILayout.EndHorizontal(); + } + + DoEditButton(); + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Collisions", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(collisionMaterial, new GUIContent("Collision material")); + EditorGUILayout.PropertyField(selfCollisions, new GUIContent("Self collisions")); + EditorGUILayout.PropertyField(surfaceCollisions, new GUIContent("Surface-based collisions")); + + EditorGUILayout.Space(); + ObiEditorUtils.DoToggleablePropertyGroup(stretchShearConstraintsEnabled, new GUIContent("Stretch & Shear Constraints", Resources.Load("Icons/ObiStretchShearConstraints Icon")), + () => { + EditorGUILayout.PropertyField(stretchCompliance, new GUIContent("Stretch compliance")); + EditorGUILayout.PropertyField(shear1Compliance, new GUIContent("Shear compliance X")); + EditorGUILayout.PropertyField(shear2Compliance, new GUIContent("Shear compliance Y")); + }); + + ObiEditorUtils.DoToggleablePropertyGroup(bendTwistConstraintsEnabled, new GUIContent("Bend & Twist Constraints", Resources.Load("Icons/ObiBendTwistConstraints Icon")), + () => { + EditorGUILayout.PropertyField(torsionCompliance, new GUIContent("Torsion compliance")); + EditorGUILayout.PropertyField(bend1Compliance, new GUIContent("Bend compliance X")); + EditorGUILayout.PropertyField(bend2Compliance, new GUIContent("Bend compliance Y")); + EditorGUILayout.PropertyField(plasticYield, new GUIContent("Plastic yield")); + 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")); + }); + + + if (GUI.changed) + serializedObject.ApplyModifiedProperties(); + + } + + [DrawGizmo(GizmoType.Selected)] + private static void DrawGizmos(ObiRod actor, GizmoType gizmoType) + { + Handles.color = Color.white; + if (actor.rodBlueprint != null) + ObiPathHandles.DrawPathHandle(actor.rodBlueprint.path, actor.transform.localToWorldMatrix, actor.rodBlueprint.thickness ,20); + } + + } + +} + + diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRodEditor.cs.meta b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRodEditor.cs.meta new file mode 100644 index 00000000..43404e2f --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRodEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d55c0f03ad50c414cacd39520aef2087 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeChainRendererEditor.cs b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeChainRendererEditor.cs new file mode 100644 index 00000000..76570ef5 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeChainRendererEditor.cs @@ -0,0 +1,54 @@ +using UnityEditor; +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Obi{ + + [CustomEditor(typeof(ObiRopeChainRenderer)), CanEditMultipleObjects] + public class ObiRopeChainRendererEditor : Editor + { + + ObiRopeChainRenderer renderer; + + public void OnEnable(){ + renderer = (ObiRopeChainRenderer)target; + } + + [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(); + + Editor.DrawPropertiesExcluding(serializedObject,"m_Script"); + + // Apply changes to the serializedProperty + if (GUI.changed){ + + serializedObject.ApplyModifiedProperties(); + } + + } + + } +} + diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeChainRendererEditor.cs.meta b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeChainRendererEditor.cs.meta new file mode 100644 index 00000000..f9953042 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeChainRendererEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 0efaf4d397fcc4b87842866f9a69f07b +labels: +- ObiRope +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeCursorEditor.cs b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeCursorEditor.cs new file mode 100644 index 00000000..18d81009 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeCursorEditor.cs @@ -0,0 +1,98 @@ +using UnityEditor; +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + + [CustomEditor(typeof(ObiRopeCursor)), CanEditMultipleObjects] + public class ObiRopeCursorEditor : Editor + { + SerializedProperty cursorMu; + SerializedProperty sourceMu; + SerializedProperty direction; + + public void OnEnable() + { + cursorMu = serializedObject.FindProperty("m_CursorMu"); + sourceMu = serializedObject.FindProperty("m_SourceMu"); + direction = serializedObject.FindProperty("direction"); + } + + public override void OnInspectorGUI() + { + serializedObject.UpdateIfRequiredOrScript(); + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(cursorMu); + if (EditorGUI.EndChangeCheck()) + { + foreach (var t in targets) + (t as ObiRopeCursor).UpdateCursor(); + } + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(sourceMu); + if (EditorGUI.EndChangeCheck()) + { + foreach (var t in targets) + (t as ObiRopeCursor).UpdateSource(); + } + + EditorGUILayout.PropertyField(direction); + + // Apply changes to the serializedProperty + if (GUI.changed) + serializedObject.ApplyModifiedProperties(); + + } + + private static void DrawArrow() + { + Gizmos.DrawLine(Vector3.left, Vector3.up); + Gizmos.DrawLine(Vector3.right, Vector3.up); + Gizmos.DrawLine(Vector3.left, Vector3.down); + Gizmos.DrawLine(Vector3.right, Vector3.down); + Gizmos.DrawLine(Vector3.left, Vector3.forward); + Gizmos.DrawLine(Vector3.right, Vector3.forward); + Gizmos.DrawLine(Vector3.up, Vector3.forward); + Gizmos.DrawLine(Vector3.down, Vector3.forward); + } + + [DrawGizmo(GizmoType.Selected)] + private static void DrawGizmos(ObiRopeCursor cursor, GizmoType gizmoType) + { + var rope = cursor.GetComponent(); + if (rope.solver != null) + { + Gizmos.color = new Color(1, 0.5f, 0, 0.75f); + + // 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); + } + + // draw cursor: + var element = cursor.cursorElement; + + 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 direction = pos2 - pos; + + float size = HandleUtility.GetHandleSize(pos) * 0.4f; + Gizmos.matrix = Matrix4x4.TRS(pos, Quaternion.LookRotation(direction), Vector3.one * size); + DrawArrow(); + } + } + } + } +} + diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeCursorEditor.cs.meta b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeCursorEditor.cs.meta new file mode 100644 index 00000000..f740a0b2 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeCursorEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e3ec1bf77ba7a47b596abdc62069c72b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeEditor.cs b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeEditor.cs new file mode 100644 index 00000000..9fe40c8f --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeEditor.cs @@ -0,0 +1,213 @@ +using UnityEditor; +using UnityEditor.EditorTools; +using UnityEngine; + +namespace Obi +{ + + [CustomEditor(typeof(ObiRope))] + public class ObiRopeEditor : Editor + { + + [MenuItem("GameObject/3D Object/Obi/Obi Rope", false, 300)] + 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); + } + + ObiRope actor; + + SerializedProperty ropeBlueprint; + + SerializedProperty collisionMaterial; + SerializedProperty selfCollisions; + SerializedProperty surfaceCollisions; + + SerializedProperty distanceConstraintsEnabled; + SerializedProperty stretchingScale; + SerializedProperty stretchCompliance; + SerializedProperty maxCompression; + + SerializedProperty bendConstraintsEnabled; + SerializedProperty bendCompliance; + SerializedProperty maxBending; + SerializedProperty plasticYield; + SerializedProperty plasticCreep; + + SerializedProperty aerodynamicsEnabled; + SerializedProperty drag; + SerializedProperty lift; + + SerializedProperty tearingEnabled; + SerializedProperty tearResistanceMultiplier; + SerializedProperty tearRate; + + GUIStyle editLabelStyle; + + public void OnEnable() + { + actor = (ObiRope)target; + + ropeBlueprint = serializedObject.FindProperty("m_RopeBlueprint"); + + collisionMaterial = serializedObject.FindProperty("m_CollisionMaterial"); + selfCollisions = serializedObject.FindProperty("m_SelfCollisions"); + surfaceCollisions = serializedObject.FindProperty("m_SurfaceCollisions"); + + distanceConstraintsEnabled = serializedObject.FindProperty("_distanceConstraintsEnabled"); + stretchingScale = serializedObject.FindProperty("_stretchingScale"); + stretchCompliance = serializedObject.FindProperty("_stretchCompliance"); + maxCompression = serializedObject.FindProperty("_maxCompression"); + + bendConstraintsEnabled = serializedObject.FindProperty("_bendConstraintsEnabled"); + bendCompliance = serializedObject.FindProperty("_bendCompliance"); + maxBending = serializedObject.FindProperty("_maxBending"); + 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"); + + } + + private void DoEditButton() + { + using (new EditorGUI.DisabledScope(actor.ropeBlueprint == null)) + { + EditorGUILayout.BeginHorizontal(); + GUILayout.Space(EditorGUIUtility.labelWidth); + EditorGUI.BeginChangeCheck(); + bool edit = GUILayout.Toggle(ToolManager.activeToolType == typeof(ObiPathEditor), new GUIContent(Resources.Load("EditCurves")), "Button", GUILayout.MaxWidth(36), GUILayout.MaxHeight(24)); + EditorGUILayout.LabelField("Edit path", editLabelStyle, GUILayout.ExpandHeight(true), GUILayout.MaxHeight(24)); + if (EditorGUI.EndChangeCheck()) + { + if (edit) + ToolManager.SetActiveTool(); + else + ToolManager.RestorePreviousPersistentTool(); + + SceneView.RepaintAll(); + } + EditorGUILayout.EndHorizontal(); + } + } + + public override void OnInspectorGUI() + { + if (editLabelStyle == null) + { + editLabelStyle = new GUIStyle(GUI.skin.label); + editLabelStyle.alignment = TextAnchor.MiddleLeft; + } + + serializedObject.UpdateIfRequiredOrScript(); + + if (actor.sourceBlueprint != null && actor.ropeBlueprint.path.ControlPointCount < 2) + { + actor.ropeBlueprint.GenerateImmediate(); + } + + 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) + { + (t as ObiRope).RemoveFromSolver(); + (t as ObiRope).ClearState(); + } + serializedObject.ApplyModifiedProperties(); + foreach (var t in targets) + (t as ObiRope).AddToSolver(); + } + + GUILayout.EndHorizontal(); + } + + DoEditButton(); + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Collisions", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(collisionMaterial, new GUIContent("Collision material")); + EditorGUILayout.PropertyField(selfCollisions, new GUIContent("Self collisions")); + EditorGUILayout.PropertyField(surfaceCollisions, new GUIContent("Surface-based collisions")); + + EditorGUILayout.Space(); + ObiEditorUtils.DoToggleablePropertyGroup(tearingEnabled, new GUIContent("Tearing"), + () => + { + EditorGUILayout.PropertyField(tearResistanceMultiplier, new GUIContent("Tear resistance")); + EditorGUILayout.PropertyField(tearRate, new GUIContent("Tear rate")); + }); + ObiEditorUtils.DoToggleablePropertyGroup(distanceConstraintsEnabled, new GUIContent("Distance Constraints", Resources.Load("Icons/ObiDistanceConstraints Icon")), + () => + { + EditorGUILayout.PropertyField(stretchingScale, new GUIContent("Stretching scale")); + EditorGUILayout.PropertyField(stretchCompliance, new GUIContent("Stretch compliance")); + EditorGUILayout.PropertyField(maxCompression, new GUIContent("Max compression")); + }); + + ObiEditorUtils.DoToggleablePropertyGroup(bendConstraintsEnabled, new GUIContent("Bend Constraints", Resources.Load("Icons/ObiBendConstraints Icon")), + () => + { + EditorGUILayout.PropertyField(bendCompliance, new GUIContent("Bend compliance")); + EditorGUILayout.PropertyField(maxBending, new GUIContent("Max bending")); + EditorGUILayout.PropertyField(plasticYield, new GUIContent("Plastic yield")); + 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(); + + } + + [DrawGizmo(GizmoType.Selected)] + private static void DrawGizmos(ObiRope actor, GizmoType gizmoType) + { + Handles.color = Color.white; + if (actor.ropeBlueprint != null) + ObiPathHandles.DrawPathHandle(actor.ropeBlueprint.path, actor.transform.localToWorldMatrix, actor.ropeBlueprint.thickness, 20, false); + } + + } + +} + + diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeEditor.cs.meta b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeEditor.cs.meta new file mode 100644 index 00000000..78df88c8 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b7e5f7e0daf504c86885734478e9c965 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeExtrudedRendererEditor.cs b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeExtrudedRendererEditor.cs new file mode 100644 index 00000000..02a4983f --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeExtrudedRendererEditor.cs @@ -0,0 +1,55 @@ +using UnityEditor; +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Obi{ + + [CustomEditor(typeof(ObiRopeExtrudedRenderer)), CanEditMultipleObjects] + public class ObiRopeExtrudedRendererEditor : Editor + { + + ObiRopeExtrudedRenderer renderer; + + public void OnEnable(){ + renderer = (ObiRopeExtrudedRenderer)target; + } + + [MenuItem("CONTEXT/ObiRopeExtrudedRenderer/Bake mesh")] + static void Bake(MenuCommand command) + { + ObiRopeExtrudedRenderer renderer = (ObiRopeExtrudedRenderer)command.context; + + if (renderer.actor.isLoaded) + { + 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(); + + Editor.DrawPropertiesExcluding(serializedObject,"m_Script"); + + // Apply changes to the serializedProperty + if (GUI.changed){ + + serializedObject.ApplyModifiedProperties(); + + } + + } + + } +} + diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeExtrudedRendererEditor.cs.meta b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeExtrudedRendererEditor.cs.meta new file mode 100644 index 00000000..50deeab9 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeExtrudedRendererEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 0d0e145ce66cd47e798bf4b926eddfc2 +labels: +- ObiRope +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeLineRendererEditor.cs b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeLineRendererEditor.cs new file mode 100644 index 00000000..586d69b1 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeLineRendererEditor.cs @@ -0,0 +1,38 @@ +using UnityEditor; +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Obi{ + + [CustomEditor(typeof(ObiRopeLineRenderer)), CanEditMultipleObjects] + public class ObiRopeLineRendererEditor : Editor + { + + ObiRopeLineRenderer renderer; + + public void OnEnable(){ + renderer = (ObiRopeLineRenderer)target; + } + + public override void OnInspectorGUI() { + + serializedObject.UpdateIfRequiredOrScript(); + + Editor.DrawPropertiesExcluding(serializedObject,"m_Script"); + + // Apply changes to the serializedProperty + if (GUI.changed){ + + serializedObject.ApplyModifiedProperties(); + + //renderer.UpdateRenderer(null); + + } + + } + + } +} + diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeLineRendererEditor.cs.meta b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeLineRendererEditor.cs.meta new file mode 100644 index 00000000..5accc43c --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeLineRendererEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: c0a72c38772bb454dabc7efc5b8f03be +labels: +- ObiRope +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeMeshRendererEditor.cs b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeMeshRendererEditor.cs new file mode 100644 index 00000000..2d110592 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeMeshRendererEditor.cs @@ -0,0 +1,52 @@ +using UnityEditor; +using UnityEngine; + +namespace Obi{ + + [CustomEditor(typeof(ObiRopeMeshRenderer)), CanEditMultipleObjects] + public class ObiRopeMeshRendererEditor : Editor + { + + ObiRopeMeshRenderer renderer; + + [MenuItem("CONTEXT/ObiRopeMeshRenderer/Bake mesh")] + static void Bake(MenuCommand command) + { + ObiRopeMeshRenderer renderer = (ObiRopeMeshRenderer)command.context; + + if (renderer.actor.isLoaded) + { + 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(); + + Editor.DrawPropertiesExcluding(serializedObject,"m_Script"); + + // Apply changes to the serializedProperty + if (GUI.changed){ + + serializedObject.ApplyModifiedProperties(); + + } + + } + + } +} + diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeMeshRendererEditor.cs.meta b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeMeshRendererEditor.cs.meta new file mode 100644 index 00000000..6a6c6a27 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeMeshRendererEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 297abfc8979aa46329f3a7e914866adc +labels: +- ObiRope +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeSectionEditor.cs b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeSectionEditor.cs new file mode 100644 index 00000000..b5c6fe48 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeSectionEditor.cs @@ -0,0 +1,213 @@ +using UnityEditor; +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Obi{ + + /** + * Custom inspector for ObiParticleRenderer component. + */ + + [CustomEditor(typeof(ObiRopeSection))] + public class ObiRopeSectionEditor : Editor + { + + ObiRopeSection section; + bool[] selected = new bool[0]; + + Color previewBck = new Color(0.2f,0.2f,0.2f,1); + Color previewLines = new Color(0.15f,0.15f,0.15f,1); + + public void OnEnable(){ + section = (ObiRopeSection)target; + } + + public override bool HasPreviewGUI(){ + return true; + } + + private void ResetSelection(){ + selected = new bool[section.Segments]; + } + + public override void OnInspectorGUI() { + + serializedObject.UpdateIfRequiredOrScript(); + + Editor.DrawPropertiesExcluding(serializedObject,"m_Script"); + + GUI.enabled = !EditorApplication.isPlaying; + GUILayout.Label("Presets"); + + GUILayout.BeginHorizontal(); + if (GUILayout.Button("4-segment circle")){ + Undo.RecordObject(section, "Set rope section preset"); + section.CirclePreset(4); + ResetSelection(); + } + + if (GUILayout.Button("8-segment circle")){ + Undo.RecordObject(section, "Set rope section preset"); + section.CirclePreset(8); + ResetSelection(); + } + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + if (GUILayout.Button("12-segment circle")){ + Undo.RecordObject(section, "Set rope section preset"); + section.CirclePreset(12); + ResetSelection(); + } + + if (GUILayout.Button("16-segment circle")){ + Undo.RecordObject(section, "Set rope section preset"); + section.CirclePreset(16); + ResetSelection(); + } + GUILayout.EndHorizontal(); + + GUILayout.Label("Tools"); + if (GUILayout.Button("Add vertex")){ + Undo.RecordObject(section, "Add rope vertex"); + section.vertices.Add(Vector2.zero); + } + + if (GUILayout.Button("Remove selected vertices")){ + Undo.RecordObject(section, "Remove rope vertices"); + for (int i = selected.Length-1; i > 0; --i){ + if (selected[i] && section.vertices.Count > 3) + section.vertices.RemoveAt(i); + } + // special cases: first vertex: + if (selected[0] && section.vertices.Count > 3){ + section.vertices.RemoveAt(0); + section.vertices[section.vertices.Count-1] = section.vertices[0]; + } + + ResetSelection(); + } + GUI.enabled = true; + + // Apply changes to the serializedProperty + if (GUI.changed){ + serializedObject.ApplyModifiedProperties(); + EditorUtility.SetDirty(target); + } + + } + + private void DrawSectionOutline(Rect region, Color color){ + // Draw segment lines: + Handles.BeginGUI( ); + Color oldColor = Handles.color; + Handles.color = color; + Vector3[] points = new Vector3[section.vertices.Count]; + for (int i = 0; i < section.vertices.Count; i++){ + points[i] = new Vector3(region.center.x + section.vertices[i].x * region.width * 0.5f, + region.center.y + section.vertices[i].y * region.height * 0.5f,0); + } + Handles.DrawAAPolyLine(points); + Handles.EndGUI(); + Handles.color = oldColor; + } + + private void DrawDrawingArea(Rect region){ + // Draw drawing area grid: + Handles.BeginGUI(); + Handles.DrawSolidRectangleWithOutline(region,previewBck,previewLines); + + Color oldColor = Handles.color; + Handles.color = previewLines; + + if (section.snapX > 5){ + float x = region.center.x; + while (x < region.xMax){ + Handles.DrawLine(new Vector3(x,region.yMin,0),new Vector3(x,region.yMax,0)); + x += section.snapX; + } + x = region.center.x - section.snapX; + while (x > region.xMin){ + Handles.DrawLine(new Vector3(x,region.yMin,0),new Vector3(x,region.yMax,0)); + x -= section.snapX; + } + } + + if (section.snapY > 5){ + float y = region.center.y; + while (y < region.yMax){ + Handles.DrawLine(new Vector3(region.xMin,y,0),new Vector3(region.xMax,y,0)); + y += section.snapY; + } + y = region.center.y - section.snapY; + while (y > region.yMin){ + Handles.DrawLine(new Vector3(region.xMin,y,0),new Vector3(region.xMax,y,0)); + y -= section.snapY; + } + } + + Handles.color = oldColor; + Handles.EndGUI(); + } + + public override void OnPreviewGUI(Rect region, GUIStyle background) + { + DrawSectionOutline(region, Color.red); + } + + public override void OnInteractivePreviewGUI(Rect region, GUIStyle background) + { + Array.Resize(ref selected,section.Segments); + + // Calculate drawing area rect: + Vector2 oldCenter = region.center; + if (region.width > region.height) + region.width = region.height; + if (region.height > region.width) + region.height = region.width; + + region.width -= 10; + region.height -= 15; + + region.center = oldCenter; + + // Draw background and lines: + DrawDrawingArea(region); + + // Draw the section outline: + DrawSectionOutline(region, Color.white); + + // Draw all draggable vertices: + for (int i = 0; i < section.Segments; i++){ + + float x = region.center.x + section.vertices[i].x * region.width * 0.5f; + float y = region.center.y + section.vertices[i].y * region.height * 0.5f; + Vector2 pos = new Vector2(x,y); + + bool oldSelection = selected[i]; + Vector2 olsPos = pos; + selected[i] = ObiDraggableIcon.Draw(selected[i],i,ref pos,Color.red); + + if (selected[i] != oldSelection) + this.Repaint(); + + if (pos != olsPos){ + + pos.x = Mathf.Clamp(ObiRopeSection.SnapTo(pos.x - region.center.x,section.snapX,5) / (region.width * 0.5f),-1,1); + pos.y = Mathf.Clamp(ObiRopeSection.SnapTo(pos.y - region.center.y,section.snapY,5) / (region.height * 0.5f),-1,1); + section.vertices[i] = pos; + if (i == 0) + section.vertices[section.Segments] = pos; + + EditorUtility.SetDirty(target); + } + } + + } + + } + +} + diff --git a/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeSectionEditor.cs.meta b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeSectionEditor.cs.meta new file mode 100644 index 00000000..c12c5c62 --- /dev/null +++ b/xiaofang/Assets/Obi/Editor/RopeAndRod/ObiRopeSectionEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 1539d8c58261942e28859228dfa310fb +labels: +- ObiRope +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/QuickstartGuide_rope.pdf b/xiaofang/Assets/Obi/QuickstartGuide_rope.pdf new file mode 100644 index 00000000..d2071e96 --- /dev/null +++ b/xiaofang/Assets/Obi/QuickstartGuide_rope.pdf @@ -0,0 +1,21 @@ + Quickstart Guide + +1.- Follow the setup guide in our webpage for steps on how to install Obi: +http://obi.virtualmethodstudio.com/tutorials/setup.html +2.- To create a rope, click on GameObject->3D Object->Obi->Obi Rope. +3.- Rope data is stored in blueprints. Create a blueprint asset for your rope by clicking +the “create” button in the ObiRope component inspector and saving the blueprint fle +somewhere in your project. + +4.- You're done! click play, you should see your rope falling due to gravity. +There's so much more you can do with Obi: get your rope to collide against objects in +the scene, other ropes or even itself, attach parts of it to other objects, set rope +properties in the path editor, simulate aerodynamics, completely customize the +appearance your rope, simulate rigid rods, etc. For further information, please refer +to the Manual. + + Support / Contact + +If you have any suggestions, questions or issues, contact the developer at: + http://obi.virtualmethodstudio.com + diff --git a/xiaofang/Assets/Obi/QuickstartGuide_rope.pdf.meta b/xiaofang/Assets/Obi/QuickstartGuide_rope.pdf.meta new file mode 100644 index 00000000..0218f7a9 --- /dev/null +++ b/xiaofang/Assets/Obi/QuickstartGuide_rope.pdf.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: dd3977598aee74c5eaa2111f3d999165 +labels: +- ObiRope +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/README.rtf b/xiaofang/Assets/Obi/README.rtf new file mode 100644 index 00000000..d6d71741 --- /dev/null +++ b/xiaofang/Assets/Obi/README.rtf @@ -0,0 +1,38 @@ +{\rtf1\ansi\ansicpg1252\cocoartf2512 +\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fmodern\fcharset0 Courier-Bold;\f1\fmodern\fcharset0 Courier;} +{\colortbl;\red255\green255\blue255;} +{\*\expandedcolortbl;;} +\paperw11900\paperh16840\margl1440\margr1440\vieww23180\viewh10900\viewkind0 +\deftab720 +\pard\pardeftab720\partightenfactor0 + +\f0\b\fs26 \cf0 \expnd0\expndtw0\kerning0 +OFFICIAL OBI WEBPAGE:\ +{\field{\*\fldinst{HYPERLINK "http://obi.virtualmethodstudio.com"}}{\fldrslt +\f1\b0 http://obi.virtualmethodstudio.com}}\ +\ +OFFICIAL FORUM:\ +{\field{\*\fldinst{HYPERLINK "http://obi.virtualmethodstudio.com/forum"}}{\fldrslt +\f1\b0 http://obi.virtualmethodstudio.com/forum}}\ +\ +CREDITS: +\f1\b0 \ +\ +\ul Programming, design:\ulnone \ +Jos\'e9 Mar\'eda \'93ArK\'94 M\'e9ndez Gonz\'e1lez\ +\ +\ul Support, Community management and Web/Forum maintenance:\ulnone \ +Lidia Mart\'ednez Prado \ +\ +\ul Special thanks to:\ulnone \ +VargaPD (testing and debugging)\ +theANMATOR2b (testing)\ +Hanging Cui (testing, help with vectorization issues)\ +Janne Ramstedt (debugging and suggestions)\ +Tigrero Tiger (debugging)\ +Hatchling (feedback regarding collision filtering and spatial query API)\ +\ +all the folks at the Unity forums and of course, all Obi users.\ +\ +\ +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/README.rtf.meta b/xiaofang/Assets/Obi/README.rtf.meta new file mode 100644 index 00000000..de9ed91b --- /dev/null +++ b/xiaofang/Assets/Obi/README.rtf.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 133c58a050c6b404cb14cc72f0a1676c +timeCreated: 1443155832 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources.meta b/xiaofang/Assets/Obi/Resources.meta new file mode 100644 index 00000000..0cc732a6 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6217e7f6fe8104bbca06fe7ac150a57d +folderAsset: yes +timeCreated: 1435572248 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute.meta b/xiaofang/Assets/Obi/Resources/Compute.meta new file mode 100644 index 00000000..054ac134 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 55c2294f77a2c4783b788be18cc01798 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/AerodynamicConstraints.compute b/xiaofang/Assets/Obi/Resources/Compute/AerodynamicConstraints.compute new file mode 100644 index 00000000..d51c3c4b --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/AerodynamicConstraints.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/AerodynamicConstraints.compute.meta new file mode 100644 index 00000000..229e5ddc --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/AerodynamicConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a819ec002d4434b5da29879a26e3211a +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/AtomicDeltas.cginc b/xiaofang/Assets/Obi/Resources/Compute/AtomicDeltas.cginc new file mode 100644 index 00000000..78305076 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/AtomicDeltas.cginc @@ -0,0 +1,75 @@ +#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; + } +} + +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Resources/Compute/AtomicDeltas.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/AtomicDeltas.cginc.meta new file mode 100644 index 00000000..8f9c197c --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/AtomicDeltas.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1a767b30eef4240859cf6158473bd06a +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/BendConstraints.compute b/xiaofang/Assets/Obi/Resources/Compute/BendConstraints.compute new file mode 100644 index 00000000..5652e39c --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/BendConstraints.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/BendConstraints.compute.meta new file mode 100644 index 00000000..c253612b --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/BendConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 92b982b3ba8824f1cb17f9313e0b11ac +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/BendTwistConstraints.compute b/xiaofang/Assets/Obi/Resources/Compute/BendTwistConstraints.compute new file mode 100644 index 00000000..81969677 --- /dev/null +++ b/xiaofang/Assets/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.xyz,omega.xyz) > dot(omega_plus.xyz,omega_plus.xyz)) + 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/xiaofang/Assets/Obi/Resources/Compute/BendTwistConstraints.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/BendTwistConstraints.compute.meta new file mode 100644 index 00000000..ab675e5e --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/BendTwistConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e5ad8a2b8563941539b7551b0a93b911 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/BitonicSort.compute b/xiaofang/Assets/Obi/Resources/Compute/BitonicSort.compute new file mode 100644 index 00000000..1929395f --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/BitonicSort.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/BitonicSort.compute.meta new file mode 100644 index 00000000..16cb0e09 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/BitonicSort.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ceefe1197724d4a408783ad72b2c56ab +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/Bounds.cginc b/xiaofang/Assets/Obi/Resources/Compute/Bounds.cginc new file mode 100644 index 00000000..2549b518 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/Bounds.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/Bounds.cginc.meta new file mode 100644 index 00000000..f3c0a8e7 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/Bounds.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 52c09ed0a553243328693072f77d1465 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/BoundsReduction.compute b/xiaofang/Assets/Obi/Resources/Compute/BoundsReduction.compute new file mode 100644 index 00000000..91dabe39 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/BoundsReduction.compute @@ -0,0 +1,93 @@ +#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 + collisionMargin + (m >= 0 ? collisionMaterials[m].stickDistance : 0); + #else + float solidRadius = principalRadii[p].x + collisionMargin; + #endif + + // Expand simplex bounds, using both the particle's original position and its velocity: + sxBounds.EncapsulateParticle(positions[p], + IntegrateLinear(positions[p], velocities[p], deltaTime * particleCCD), + max(solidRadius, fluidMaterials[p].x * 0.5f)); + + 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/xiaofang/Assets/Obi/Resources/Compute/BoundsReduction.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/BoundsReduction.compute.meta new file mode 100644 index 00000000..5959ca43 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/BoundsReduction.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4eaa80a9c435f42fa9837a3594766a1f +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/BoxShape.compute b/xiaofang/Assets/Obi/Resources/Compute/BoxShape.compute new file mode 100644 index 00000000..d965346e --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/BoxShape.compute @@ -0,0 +1,125 @@ +#include "ColliderDefinitions.cginc" +#include "ContactHandling.cginc" +#include "Transform.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; + +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); + } +}; + +[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/xiaofang/Assets/Obi/Resources/Compute/BoxShape.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/BoxShape.compute.meta new file mode 100644 index 00000000..6928e9b1 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/BoxShape.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9df6755bffe0b4dc5a30f4715e8a503c +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/BoxShapeQuery.compute b/xiaofang/Assets/Obi/Resources/Compute/BoxShapeQuery.compute new file mode 100644 index 00000000..034373c3 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/BoxShapeQuery.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/BoxShapeQuery.compute.meta new file mode 100644 index 00000000..4b6e8ed4 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/BoxShapeQuery.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 409c5f7d65dd84df9853de82bd3fbf46 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/CapsuleShape.compute b/xiaofang/Assets/Obi/Resources/Compute/CapsuleShape.compute new file mode 100644 index 00000000..1b99c0e6 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/CapsuleShape.compute @@ -0,0 +1,122 @@ +#include "ColliderDefinitions.cginc" +#include "ContactHandling.cginc" +#include "Transform.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; + +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); + } +}; + +[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/xiaofang/Assets/Obi/Resources/Compute/CapsuleShape.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/CapsuleShape.compute.meta new file mode 100644 index 00000000..0295bcb2 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/CapsuleShape.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bd92ed8a5b1bc404c9b114747495f080 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/ChainConstraints.compute b/xiaofang/Assets/Obi/Resources/Compute/ChainConstraints.compute new file mode 100644 index 00000000..62c8c1a4 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/ChainConstraints.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/ChainConstraints.compute.meta new file mode 100644 index 00000000..561afa19 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/ChainConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2a5f3e8f1330846819f1abe7a6181c51 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/ClothRendering.compute b/xiaofang/Assets/Obi/Resources/Compute/ClothRendering.compute new file mode 100644 index 00000000..069c5990 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/ClothRendering.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/ClothRendering.compute.meta new file mode 100644 index 00000000..5b2b24c9 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/ClothRendering.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7620e03e082f448828570f6659b73301 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/ColliderCollisionConstraints.compute b/xiaofang/Assets/Obi/Resources/Compute/ColliderCollisionConstraints.compute new file mode 100644 index 00000000..d4f22386 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/ColliderCollisionConstraints.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/ColliderCollisionConstraints.compute.meta new file mode 100644 index 00000000..c8cd8057 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/ColliderCollisionConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ff4c3e041ffef4a5c91cf275735a7ecc +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/ColliderDefinitions.cginc b/xiaofang/Assets/Obi/Resources/Compute/ColliderDefinitions.cginc new file mode 100644 index 00000000..f5317ee4 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/ColliderDefinitions.cginc @@ -0,0 +1,80 @@ +#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 +{ + 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/xiaofang/Assets/Obi/Resources/Compute/ColliderDefinitions.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/ColliderDefinitions.cginc.meta new file mode 100644 index 00000000..46948415 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/ColliderDefinitions.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fe486a46344cd4c299b4475a4e046796 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/ColliderFrictionConstraints.compute b/xiaofang/Assets/Obi/Resources/Compute/ColliderFrictionConstraints.compute new file mode 100644 index 00000000..175d3320 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/ColliderFrictionConstraints.compute @@ -0,0 +1,192 @@ +#include "ContactHandling.cginc" +#include "ColliderDefinitions.cginc" +#include "Rigidbody.cginc" +#include "Simplex.cginc" +#include "CollisionMaterial.cginc" +#include "Integration.cginc" +#include "AtomicDeltas.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; + relativeVelocity += float4(cross(angularVelocityA.xyz, rA.xyz), 0); + } + + // 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/xiaofang/Assets/Obi/Resources/Compute/ColliderFrictionConstraints.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/ColliderFrictionConstraints.compute.meta new file mode 100644 index 00000000..e3e3d701 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/ColliderFrictionConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ec52fd9d30c594294a7c2f0f50cc6096 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/ColliderGrid.compute b/xiaofang/Assets/Obi/Resources/Compute/ColliderGrid.compute new file mode 100644 index 00000000..c699fbf0 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/ColliderGrid.compute @@ -0,0 +1,473 @@ +#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 32 + +#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 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]; + + if (invMasses[particleIndex] > 0) + { + 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; + + // 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; + } + + // 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/xiaofang/Assets/Obi/Resources/Compute/ColliderGrid.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/ColliderGrid.compute.meta new file mode 100644 index 00000000..6dbc2185 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/ColliderGrid.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: df152b65921c34856a1ea566d782acc1 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/CollisionMaterial.cginc b/xiaofang/Assets/Obi/Resources/Compute/CollisionMaterial.cginc new file mode 100644 index 00000000..5bfaa856 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/CollisionMaterial.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/CollisionMaterial.cginc.meta new file mode 100644 index 00000000..adab542a --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/CollisionMaterial.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 034a508161c9948969266fd0cbf21988 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/ContactHandling.cginc b/xiaofang/Assets/Obi/Resources/Compute/ContactHandling.cginc new file mode 100644 index 00000000..1ffbd7fb --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/ContactHandling.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/ContactHandling.cginc.meta new file mode 100644 index 00000000..0cf2726c --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/ContactHandling.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 28492658e279e4adaab298f430af09a2 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/DeformableTriangles.compute b/xiaofang/Assets/Obi/Resources/Compute/DeformableTriangles.compute new file mode 100644 index 00000000..636b7a71 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/DeformableTriangles.compute @@ -0,0 +1,139 @@ +#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 wind; +StructuredBuffer phases; + +RWStructuredBuffer normals; +RWStructuredBuffer tangents; +RWStructuredBuffer renderableOrientations; + +// Variables set from the CPU +uint normalsCount; +uint triangleCount; +uint edgeCount; + +void AccumulateNormal(in int index, in float4 delta) +{ + InterlockedAddFloat(normals, index, 0, delta.x); + InterlockedAddFloat(normals, index, 1, delta.y); + InterlockedAddFloat(normals, index, 2, delta.z); +} + +void AccumulateTangent(in int index, in float4 delta) +{ + InterlockedAddFloat(tangents, index, 0, delta.x); + InterlockedAddFloat(tangents, index, 1, delta.y); + InterlockedAddFloat(tangents, index, 2, delta.z); + InterlockedAddFloat(tangents, index, 3, delta.w); +} + +[numthreads(128, 1, 1)] +void ResetNormals (uint3 id : SV_DispatchThreadID) +{ + uint i = id.x; + if (i >= normalsCount) return; + + if ((phases[i] & (int)PHASE_FLUID) == 0) + { + normals[i] = asuint(FLOAT4_ZERO); + tangents[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 = (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) + { + float4 normal = asfloat(normals[i]); + float4 tangent = asfloat(tangents[i]); + + if (dot(normal, normal) > EPSILON && + dot(tangent, tangent) > EPSILON) + { + normals[i] = asuint(normalizesafe(normal)); + tangents[i] = asuint(normalizesafe(tangent)); + + // particle orientation from normal/tangent: + renderableOrientations[i] = q_look_at(asfloat(normals[i]).xyz, asfloat(tangents[i]).xyz); + } + } +} diff --git a/xiaofang/Assets/Obi/Resources/Compute/DeformableTriangles.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/DeformableTriangles.compute.meta new file mode 100644 index 00000000..6175b9da --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/DeformableTriangles.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2444094f2fb2c43cfb9c90b5949f39ec +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/DensityConstraints.compute b/xiaofang/Assets/Obi/Resources/Compute/DensityConstraints.compute new file mode 100644 index 00000000..f373013c --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/DensityConstraints.compute @@ -0,0 +1,326 @@ +#pragma kernel UpdateDensities +#pragma kernel Apply +#pragma kernel ApplyPositionDeltas +#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; +RWStructuredBuffer sortedFluidData; + +StructuredBuffer prevOrientations; + +StructuredBuffer wind; + +RWStructuredBuffer fluidData; +RWStructuredBuffer positions; +RWStructuredBuffer orientations; +RWStructuredBuffer velocities; +RWStructuredBuffer userData; +RWStructuredBuffer normals; + +RWStructuredBuffer massCenters; +RWStructuredBuffer prevMassCenters; + +RWStructuredBuffer renderablePositions; +RWStructuredBuffer renderableOrientations; +RWStructuredBuffer renderableRadii; + +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 = avgKernel * float4(positionA.xyz, 1) / positionA.w; + float4 prevMassCenterA = avgKernel * float4(sortedPrevPositions[i].xyz, 1) / positionA.w; + float4x4 anisotropyA = avgKernel * (multrnsp4(positionA, sortedPrevPositions[i]) + FLOAT4X4_IDENTITY * 0.2 * 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 += avgKernel * float4(positionB.xyz, 1) / positionB.w; + prevMassCenterA += avgKernel * float4(sortedPrevPositions[n].xyz, 1) / positionB.w; + anisotropyA += avgKernel * (multrnsp4(positionB, sortedPrevPositions[n]) + FLOAT4X4_IDENTITY * 0.2 * 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); + + // 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, 2); + + 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 and vorticity: + float4 viscGoal = float4(massCenterB.xyz + rotate_vector(renderableOrientations[n], (prevPositionA - prevMassCenters[n]).xyz), 0); + float4 vortGoal = float4(massCenterB.xyz + rotate_vector(renderableOrientations[n], (positionA - massCenterB).xyz), 0); + viscVortDelta += (viscGoal - positionA) * fluidMaterialB.z + (vortGoal - positionA) * fluidMaterialB.w * 0.1; + } + + // viscosity and vorticity: + float4 viscGoal = float4(massCenterA.xyz + rotate_vector(renderableOrientations[i], (prevPositionA - prevMassCenters[i]).xyz), 0); + float4 vortGoal = float4(massCenterA.xyz + rotate_vector(renderableOrientations[i], (positionA - massCenterA).xyz), 0); + viscVortDelta += (viscGoal - positionA) * fluidMaterialA.z + (vortGoal - positionA) * fluidMaterialA.w * 0.1; + + 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); + + orientations[p] = qmul(renderableOrientations[i], prevOrientations[p]); + fluidData[p] = sortedFluidData[i]; +} + +[numthreads(128, 1, 1)] +void ApplyAtmosphere (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= dispatchBuffer[3]) return; + + int originalIndex = sortedToOriginal[i]; + + float4 normal = FLOAT4_ZERO; + float restVolumeA = pow(abs(sortedPrincipalRadii[i].x * 2),3 - mode); + float4 positionA = sortedPositions[i]; + float radiiA = sortedFluidMaterials[i].x; + float4 userDataA = sortedUserData[i]; + + 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); + float radiiB = sortedFluidMaterials[n].x; + + float4 dir = positionA - sortedPositions[n]; + float dist = length(dir); + + float avgKernel = (Poly6(dist,radiiA) + Poly6(dist,radiiB)) * 0.5f; + float avgGradient = (Spiky(dist,radiiA) + Spiky(dist,radiiB)) * 0.5; + + // property diffusion: + float diffusionSpeed = (sortedFluidInterface[i].w + sortedFluidInterface[n].w) * avgKernel * deltaTime; + float4 userDelta = (sortedUserData[n] - userDataA) * diffusionSpeed; + userDataA += restVolumeB / restVolumeA * userDelta; + + // calculate color field normal: + float radius = (radiiA + radiiB) * 0.5f; + float4 vgrad = dir / (dist + EPSILON) * avgGradient; + normal += vgrad * radius * restVolumeB; + } + + // particles near the surface should experience drag: + float4 velocityDiff = velocities[originalIndex] - wind[originalIndex]; + velocities[originalIndex] -= sortedFluidInterface[i].x * velocityDiff * max(0, 1 - fluidData[i][0] * restVolumeA) * deltaTime; + + // ambient pressure: + velocities[originalIndex] += sortedFluidInterface[i].y * normal * deltaTime; + + normals[originalIndex] = normal; + userData[originalIndex] = userDataA; +} + +[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)); +} diff --git a/xiaofang/Assets/Obi/Resources/Compute/DensityConstraints.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/DensityConstraints.compute.meta new file mode 100644 index 00000000..d170b648 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/DensityConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 80856d7c741a940a7bbf0d7d4f472e1d +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/DistanceConstraints.compute b/xiaofang/Assets/Obi/Resources/Compute/DistanceConstraints.compute new file mode 100644 index 00000000..bf507f61 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/DistanceConstraints.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/DistanceConstraints.compute.meta new file mode 100644 index 00000000..8d55c47c --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/DistanceConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4883886c2cc7740e18f906dcf663c1f1 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/DistanceFieldShape.compute b/xiaofang/Assets/Obi/Resources/Compute/DistanceFieldShape.compute new file mode 100644 index 00000000..c28cc0ca --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/DistanceFieldShape.compute @@ -0,0 +1,212 @@ +#include "ColliderDefinitions.cginc" +#include "ContactHandling.cginc" +#include "Transform.cginc" +#include "Simplex.cginc" +#include "Bounds.cginc" +#include "SolverParameters.cginc" +#include "Optimization.cginc" + +#pragma kernel GenerateContacts + +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; + } +}; + +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; + +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); + } +}; + +[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; + + DistanceFieldHeader header = distanceFieldHeaders[s.dataIndex]; + + 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/xiaofang/Assets/Obi/Resources/Compute/DistanceFieldShape.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/DistanceFieldShape.compute.meta new file mode 100644 index 00000000..0f2a1664 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/DistanceFieldShape.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2391a8c719b4c4193a8be38dcf83e8fd +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/EdgeMeshShape.compute b/xiaofang/Assets/Obi/Resources/Compute/EdgeMeshShape.compute new file mode 100644 index 00000000..3a9a6fb7 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/EdgeMeshShape.compute @@ -0,0 +1,208 @@ +#include "ColliderDefinitions.cginc" +#include "ContactHandling.cginc" +#include "Transform.cginc" +#include "Simplex.cginc" +#include "Bounds.cginc" +#include "SolverParameters.cginc" +#include "Optimization.cginc" + +#pragma kernel GenerateContacts + +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 EdgeMeshHeader +{ + int firstNode; + int nodeCount; + int firstEdge; + int edgeCount; + int firstVertex; + int vertexCount; +}; + +struct Edge +{ + int i1; + int i2; + aabb b; +}; + + +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 edgeMeshHeaders; +StructuredBuffer edgeBihNodes; +StructuredBuffer edges; +StructuredBuffer edgeVertices; + +StructuredBuffer contactPairs; +StructuredBuffer contactOffsetsPerType; + +RWStructuredBuffer contacts; +RWStructuredBuffer dispatchBuffer; + +StructuredBuffer worldToSolver; + +uint maxContacts; +float deltaTime; + +struct EdgeMesh : IDistanceFunction +{ + shape s; + transform colliderToSolver; + int dataOffset; + + EdgeMeshHeader header; + + 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; + + Edge t = edges[header.firstEdge + dataOffset]; + float4 v1 = (float4(edgeVertices[header.firstVertex + t.i1],0,0) + s.center) * colliderToSolver.scale; + float4 v2 = (float4(edgeVertices[header.firstVertex + t.i2],0,0) + s.center) * colliderToSolver.scale; + + float mu = 0; + float4 nearestPoint = NearestPointOnEdge(v1, v2, 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); + } + +}; + +[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; + meshShape.header = header; + + // 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.dataOffset = dataOffset; + + 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/xiaofang/Assets/Obi/Resources/Compute/EdgeMeshShape.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/EdgeMeshShape.compute.meta new file mode 100644 index 00000000..3f9c16b5 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/EdgeMeshShape.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 229868ae412914f11bbfa8c3ab9474c8 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/FluidChunkDefs.cginc b/xiaofang/Assets/Obi/Resources/Compute/FluidChunkDefs.cginc new file mode 100644 index 00000000..24d1528e --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/FluidChunkDefs.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/FluidChunkDefs.cginc.meta new file mode 100644 index 00000000..2f088fd3 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/FluidChunkDefs.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bc0e240276e8a42a2ac5a11368e4f7fa +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/FluidFoam.compute b/xiaofang/Assets/Obi/Resources/Compute/FluidFoam.compute new file mode 100644 index 00000000..0eedd8e0 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/FluidFoam.compute @@ -0,0 +1,432 @@ +#pragma kernel SortFluidData + +#pragma kernel Emit +#pragma kernel CopyAliveCount +#pragma kernel Update +#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 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 to camera +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; + +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; + +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) +}; + +//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); +} + +void RandomInCylinder(float seed, float4 pos1, float4 pos2, float radius, out float4 position, out float3 velocity) +{ + float3 rand = hash33(lerp(pos1.xyz, pos2.xyz, seed)); + + float3 v = pos2.xyz - pos1.xyz; + float d = length(v); + float3 b1 = d > EPSILON ? v / d : v; + 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(pos1.xyz + b1 * d * rand.z + 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] = float4(positions[original].xyz, 1 / fluidData[original].x); + sortedVelocities[i] = velocities[original]; + sortedOrientations[i] = orientations[original]; + sortedRadii[i] = fluidMaterial[original].x * (principalRadii[original] / principalRadii[original].x); +} + +[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(length(angularVelocities[p]), 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(j, positions[p], positions[p] + velocities[p] * deltaTime, principalRadii[p].x, outputPositions[count], radialVelocity); + + // calculate initial life/size/color: + float initialLife = potential.y * (lifetime - hash13(positions[p].xyz) * lifetime * lifetimeRandom); + float initialSize = particleSize - hash13(positions[p].xyz + float3(0.51,0.23,0.1)) * particleSize * 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; + float kernelSum = -packedData.w; + int 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,interactionDist)); + 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 = principalRadii[p].xyz; + + normal.xyz = rotate_vector(q_conj(orientations[p]), normal.xyz) / radii; + d = length(normal.xyz) * radii.x; + + // velocities.w is volume (1/normalized density): + float w = positions[p].w * Poly6(d, radii.x); + + kernelSum += w; + advectedVelocity += velocities[p] * 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 > 3) + { + // advection: + forces = packedData.z / deltaTime * (advectedVelocity / (kernelSum + packedData.w) - inputVelocities[count]); + + // buoyancy: + forces -= float4(gravity,0) * inputVelocities[count].w * saturate(kernelSum); + + } + 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; + outputAttributes[aliveCount] = attributes; + outputColors[aliveCount] = inputColors[count]; + + // integrate: + outputVelocities[aliveCount] = (inputVelocities[count] + forces * deltaTime) * velocityScale; + outputPositions[aliveCount] = float4((inputPositions[count] + outputVelocities[aliveCount] * deltaTime).xyz, neighbourCount); + } +} + +[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 = inputPositions[indexLeft]; + float4 posRight = inputPositions[indexRight]; + float4 velLeft = inputVelocities[indexLeft]; + float4 velRight = inputVelocities[indexRight]; + float4 colorLeft = inputColors[indexLeft]; + float4 colorRight = inputColors[indexRight]; + float4 attrLeft = inputAttributes[indexLeft]; + float4 attrRight = inputAttributes[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( inputVelocities[i] )); + 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/xiaofang/Assets/Obi/Resources/Compute/FluidFoam.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/FluidFoam.compute.meta new file mode 100644 index 00000000..2fcb5eaf --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/FluidFoam.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a8c6735ba651f4c808f068c3b99bca04 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/FluidFoamDensity.compute b/xiaofang/Assets/Obi/Resources/Compute/FluidFoamDensity.compute new file mode 100644 index 00000000..7a2a0a65 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/FluidFoamDensity.compute @@ -0,0 +1,172 @@ +#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 sortedPositions; +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 invMass; + +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]; + 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) + { + uint cellIndex = GridHash(cellCoords + cellNeighborhood[k].xyz); + 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) 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.5f * surfaceTension, fluidDataA[0] * restVolume - 1); + + // calculate lambda: + fluidDataA[1] = -constraint / (invMass * 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); + float4 positionA = inputPositions[i]; + float4 fluidDataA = fluidData[i]; + + float4 fluidDataB; + float4 positionB; + + float4 pressureDelta = FLOAT4_ZERO; + + for (int k = 0; k < 27; ++k) + { + uint cellIndex = GridHash(cellCoords + cellNeighborhood[k].xyz); + uint start = cellStart[cellIndex]; + + for (uint j = 0; j < cellCounts[cellIndex]; ++j) + { + positionB = sortedPositions[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) continue; + + float wAvg = (0.001f + 0.2f * surfaceTension) * Poly6(dist,smoothingRadius) / Poly6(0,smoothingRadius); + float scorrA = - wAvg / (invMass * fluidDataA[3] + EPSILON); + float scorrB = - wAvg / (invMass * fluidDataB[3] + EPSILON); + pressureDelta += r / (dist + EPSILON) * Spiky(dist,smoothingRadius) * ((fluidDataA[1] + scorrA) + (fluidDataB[1] + scorrB)) * restVolume; + } + } + + // write to output positions. + inputPositions[i] = positionA + pressure * pressureDelta * invMass; +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Resources/Compute/FluidFoamDensity.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/FluidFoamDensity.compute.meta new file mode 100644 index 00000000..247a584a --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/FluidFoamDensity.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2332ee3ce70e9447d8d13b5b67ac8e6c +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/FluidKernels.cginc b/xiaofang/Assets/Obi/Resources/Compute/FluidKernels.cginc new file mode 100644 index 00000000..deac8042 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/FluidKernels.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/FluidKernels.cginc.meta new file mode 100644 index 00000000..5915645b --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/FluidKernels.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 53c4eeee7bd2141deb8d1179555a1920 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/FluidMeshChunks.compute b/xiaofang/Assets/Obi/Resources/Compute/FluidMeshChunks.compute new file mode 100644 index 00000000..da444b47 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/FluidMeshChunks.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/FluidMeshChunks.compute.meta new file mode 100644 index 00000000..e70344d3 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/FluidMeshChunks.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 745eb95f8ca884ea6830b3ca14ee05a0 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/FluidSurfaceMeshBuilding.compute b/xiaofang/Assets/Obi/Resources/Compute/FluidSurfaceMeshBuilding.compute new file mode 100644 index 00000000..d4e04809 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/FluidSurfaceMeshBuilding.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/FluidSurfaceMeshBuilding.compute.meta new file mode 100644 index 00000000..67121ca8 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/FluidSurfaceMeshBuilding.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 676e30b71ac3147969895b3f0ad6d2ec +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/GridUtils.cginc b/xiaofang/Assets/Obi/Resources/Compute/GridUtils.cginc new file mode 100644 index 00000000..c17c5ac6 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/GridUtils.cginc @@ -0,0 +1,166 @@ +#ifndef GRIDUTILS_INCLUDE +#define GRIDUTILS_INCLUDE + +#define INVALID 0xFFFFFFFF +#define MIN_GRID_LEVEL -6 // minimum cell size is 0.01 meters, enough for very small colliders / particles (log(0.01) / log(2)) +#define MAX_GRID_LEVEL 17 // maximum cell size is 131072 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/xiaofang/Assets/Obi/Resources/Compute/GridUtils.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/GridUtils.cginc.meta new file mode 100644 index 00000000..be067e28 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/GridUtils.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b4dbf43981a3b419fbc2eaf5f2c05a6c +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/HeightfieldShape.compute b/xiaofang/Assets/Obi/Resources/Compute/HeightfieldShape.compute new file mode 100644 index 00000000..e286ce6f --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/HeightfieldShape.compute @@ -0,0 +1,230 @@ +#include "ColliderDefinitions.cginc" +#include "ContactHandling.cginc" +#include "Transform.cginc" +#include "Simplex.cginc" +#include "Bounds.cginc" +#include "SolverParameters.cginc" +#include "Optimization.cginc" + +#pragma kernel GenerateContacts + +struct HeightFieldHeader +{ + int firstSample; + int sampleCount; +}; + +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; + +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); + } + +}; + +[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/xiaofang/Assets/Obi/Resources/Compute/HeightfieldShape.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/HeightfieldShape.compute.meta new file mode 100644 index 00000000..a04ea626 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/HeightfieldShape.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d9efd384bb82b4ec0b0adf1fc349a89b +ComputeShaderImporter: + externalObjects: {} + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/InertialFrame.cginc b/xiaofang/Assets/Obi/Resources/Compute/InertialFrame.cginc new file mode 100644 index 00000000..3a30c9c6 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/InertialFrame.cginc @@ -0,0 +1,18 @@ +#ifndef INERTIALFRAME_INCLUDE +#define INERTIALFRAME_INCLUDE + +#include "Transform.cginc" + +struct inertialFrame +{ + transform frame; + transform prevFrame; + + float4 velocity; + float4 angularVelocity; + + float4 acceleration; + float4 angularAcceleration; +}; + +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Resources/Compute/InertialFrame.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/InertialFrame.cginc.meta new file mode 100644 index 00000000..ed4916d3 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/InertialFrame.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2d21eb1b3353a439eb5f6f6df05dd6d0 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/InstancedParticleRendering.compute b/xiaofang/Assets/Obi/Resources/Compute/InstancedParticleRendering.compute new file mode 100644 index 00000000..b07c7bc8 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/InstancedParticleRendering.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/InstancedParticleRendering.compute.meta new file mode 100644 index 00000000..a82b45e1 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/InstancedParticleRendering.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d2b27c5c6c8154b6694d7e017468ccc0 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/Integration.cginc b/xiaofang/Assets/Obi/Resources/Compute/Integration.cginc new file mode 100644 index 00000000..fc9edd61 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/Integration.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/Integration.cginc.meta new file mode 100644 index 00000000..7940d015 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/Integration.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d436b0155e8f943d59a26290140664cd +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/InterlockedUtils.cginc b/xiaofang/Assets/Obi/Resources/Compute/InterlockedUtils.cginc new file mode 100644 index 00000000..06f22729 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/InterlockedUtils.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/InterlockedUtils.cginc.meta new file mode 100644 index 00000000..c09fa844 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/InterlockedUtils.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bb532ce1395da4d13b47a4da3e1b4033 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/MathUtils.cginc b/xiaofang/Assets/Obi/Resources/Compute/MathUtils.cginc new file mode 100644 index 00000000..5df9be82 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/MathUtils.cginc @@ -0,0 +1,557 @@ +#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) + +#include "Quaternion.cginc" +#include "Matrix.cginc" + +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 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); +} + +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); + + 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); + + if (clampToSegment) + mu = saturate(mu); + + float3 result = a + ab * mu; + return result; +} + +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 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/xiaofang/Assets/Obi/Resources/Compute/MathUtils.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/MathUtils.cginc.meta new file mode 100644 index 00000000..43b30e62 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/MathUtils.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 729e4f240dd344abfa1b0972b2ceb0ea +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/Matrix.cginc b/xiaofang/Assets/Obi/Resources/Compute/Matrix.cginc new file mode 100644 index 00000000..5a1bf98e --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/Matrix.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/Matrix.cginc.meta new file mode 100644 index 00000000..d6fefdd9 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/Matrix.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 80cddbfae548f433a93a4e6e7a10b089 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/NormalCompression.cginc b/xiaofang/Assets/Obi/Resources/Compute/NormalCompression.cginc new file mode 100644 index 00000000..4fcc93d0 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/NormalCompression.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/NormalCompression.cginc.meta new file mode 100644 index 00000000..d98da818 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/NormalCompression.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d05e07f20b7784bac93ad5818826c787 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/Optimization.cginc b/xiaofang/Assets/Obi/Resources/Compute/Optimization.cginc new file mode 100644 index 00000000..dbc54cd9 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/Optimization.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/Optimization.cginc.meta new file mode 100644 index 00000000..fe513de1 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/Optimization.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e10fb000e4ce24365adc488a45bbe664 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/ParticleCollisionConstraints.compute b/xiaofang/Assets/Obi/Resources/Compute/ParticleCollisionConstraints.compute new file mode 100644 index 00000000..66fd25b6 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/ParticleCollisionConstraints.compute @@ -0,0 +1,189 @@ +#pragma kernel Initialize +#pragma kernel Project +#pragma kernel Apply + +#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 prevOrientations; +StructuredBuffer orientations; + +RWStructuredBuffer positions; +RWStructuredBuffer deltas; + +// 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 deltaTime; +float shockPropagation; +float4 gravity; +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 + float dAB = dot(simplexPrevPositionA - simplexPrevPositionB, particleContacts[i].normal); + particleContacts[i].dist = dAB - (simplexRadiusA + simplexRadiusB); + + // calculate contact points: + float4 contactPointA = simplexPrevPositionB + particleContacts[i].normal * (particleContacts[i].dist + simplexRadiusB); + float4 contactPointB = simplexPrevPositionA - particleContacts[i].normal * (particleContacts[i].dist + simplexRadiusA); + + // 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); + + float4 simplexPositionA = float4(0,0,0,0), simplexPositionB = float4(0,0,0,0); + float simplexRadiusA = 0, simplexRadiusB = 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]; + } + 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]; + } + + 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; + + float lambda = SolvePenetration(particleContacts[i], normalInvMass, posA, posB, 10); + + if (abs(lambda) > EPSILON) + { + float shock = shockPropagation * dot(particleContacts[i].normal, 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); + } + } +} + +[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/xiaofang/Assets/Obi/Resources/Compute/ParticleCollisionConstraints.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/ParticleCollisionConstraints.compute.meta new file mode 100644 index 00000000..e53cfc74 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/ParticleCollisionConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 770004596b21f49118a60c5ad181940c +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/ParticleFrictionConstraints.compute b/xiaofang/Assets/Obi/Resources/Compute/ParticleFrictionConstraints.compute new file mode 100644 index 00000000..13c92607 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/ParticleFrictionConstraints.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/ParticleFrictionConstraints.compute.meta new file mode 100644 index 00000000..48a2a4d3 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/ParticleFrictionConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bd14011b19e9c47d1964f351a7ed4df7 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/ParticleGrid.compute b/xiaofang/Assets/Obi/Resources/Compute/ParticleGrid.compute new file mode 100644 index 00000000..bc640844 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/ParticleGrid.compute @@ -0,0 +1,600 @@ +#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 + +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, normalB = FLOAT4_ZERO; + + for (j = 0; j < a.size; ++j) + { + int particleIndex = simplices[a.start + j]; + simplexRadiusA += principalRadii[particleIndex].x * simplexBary[j]; + velocityA += velocities[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]; + normalB += asfloat(normals[particleIndex]) * surfacePoint.bary[j]; + } + + 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); + + 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, particleCoord; + uint cellIndex, n, end; + + float4 d; + float interactionRadius, cellSize; + int fluidB, level; + + 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. + level = GridLevelForSize(sortedFluidMaterials[fluidB].x); + cellSize = CellSizeOfLevel(level); + particleCoord = int4(floor((sortedPositions[fluidB] - solverBounds[0].min_)/ cellSize).xyz,level); + + if (any (particleCoord - neighborCoord)) + continue; + + // calculate particle center distance: + d = posA - sortedPositions[fluidB]; d.w = 0; + interactionRadius = max(radA, sortedFluidMaterials[fluidB].x); + + 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, particleCoord; + uint cellIndex, n, end; + + float4 d; + float interactionRadius, cellSize; + int fluidB, level; + + 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. + level = GridLevelForSize(sortedFluidMaterials[fluidB].x); + cellSize = CellSizeOfLevel(level); + particleCoord = int4(floor((sortedPositions[fluidB] - solverBounds[0].min_)/ cellSize).xyz,level); + + if (any (particleCoord - neighborCoord)) + continue; + + // calculate particle center distance: + d = posA - sortedPositions[fluidB]; d.w = 0; + interactionRadius = max(radA, sortedFluidMaterials[fluidB].x); + + 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; + } + } + } + } + } + } + + // convert simplex index to start in indices array. + int o; + sortedFluidIndices[i] = simplices[GetSimplexStartAndSize(s, o)]; +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Resources/Compute/ParticleGrid.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/ParticleGrid.compute.meta new file mode 100644 index 00000000..15d29e6b --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/ParticleGrid.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 282fd6222e54d48fea7f2d1a74501fa9 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/ParticleMeshBuilding.compute b/xiaofang/Assets/Obi/Resources/Compute/ParticleMeshBuilding.compute new file mode 100644 index 00000000..e990898d --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/ParticleMeshBuilding.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/ParticleMeshBuilding.compute.meta new file mode 100644 index 00000000..c28621d1 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/ParticleMeshBuilding.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a5989e4df4ce944ea96d566e7df4d68a +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/PathFrame.cginc b/xiaofang/Assets/Obi/Resources/Compute/PathFrame.cginc new file mode 100644 index 00000000..e9ea2742 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/PathFrame.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/PathFrame.cginc.meta new file mode 100644 index 00000000..fa818faa --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/PathFrame.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 10c2f01e614d74b30b6a489c96e8a0ce +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/PathSmoothing.compute b/xiaofang/Assets/Obi/Resources/Compute/PathSmoothing.compute new file mode 100644 index 00000000..06bf6ae5 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/PathSmoothing.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/PathSmoothing.compute.meta new file mode 100644 index 00000000..589cc57c --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/PathSmoothing.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 91c36d3d171884541b751112dfac062c +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/Phases.cginc b/xiaofang/Assets/Obi/Resources/Compute/Phases.cginc new file mode 100644 index 00000000..30bfe208 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/Phases.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/Phases.cginc.meta new file mode 100644 index 00000000..290fe950 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/Phases.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 96d6b61b6caf54444b039bf6f29c9205 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/PinConstraints.compute b/xiaofang/Assets/Obi/Resources/Compute/PinConstraints.compute new file mode 100644 index 00000000..151cc86a --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/PinConstraints.compute @@ -0,0 +1,205 @@ +#pragma kernel Clear +#pragma kernel Initialize +#pragma kernel Project +#pragma kernel Apply + +#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 rigidbody transform: + transform predictedTrfm = transforms[colliderIndex].Integrate(rb.velocity + asfloat(linearDeltasAsInt[rigidbodyIndex]), + rb.angularVelocity + asfloat(angularDeltasAsInt[rigidbodyIndex]), frameEnd); + + // predict offset point position and rb rotation at the end of the step: + predictedPinOffset = predictedTrfm.TransformPoint(offsets[i]); + predictedRotation = predictedTrfm.rotation; + + // 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.xyz, omega.xyz) > dot(omega_plus.xyz, omega_plus.xyz)) + 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); +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Resources/Compute/PinConstraints.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/PinConstraints.compute.meta new file mode 100644 index 00000000..23582462 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/PinConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d65f884fa36104c4493d2bc55441b89d +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/Quaternion.cginc b/xiaofang/Assets/Obi/Resources/Compute/Quaternion.cginc new file mode 100644 index 00000000..9143d27c --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/Quaternion.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/Quaternion.cginc.meta new file mode 100644 index 00000000..ad02e0bf --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/Quaternion.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d586fccea37884cd99448480e05b9efc +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/QueryDefinitions.cginc b/xiaofang/Assets/Obi/Resources/Compute/QueryDefinitions.cginc new file mode 100644 index 00000000..ddd2b711 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/QueryDefinitions.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/QueryDefinitions.cginc.meta new file mode 100644 index 00000000..55f203af --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/QueryDefinitions.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: aa793a9f45d044bb9af2361e9c92f11d +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/RayShapeQuery.compute b/xiaofang/Assets/Obi/Resources/Compute/RayShapeQuery.compute new file mode 100644 index 00000000..a02d9f39 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/RayShapeQuery.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/RayShapeQuery.compute.meta new file mode 100644 index 00000000..5228b817 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/RayShapeQuery.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cc1e43b48b9764f8585de0bd68298b1c +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/Rigidbody.cginc b/xiaofang/Assets/Obi/Resources/Compute/Rigidbody.cginc new file mode 100644 index 00000000..9038eef5 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/Rigidbody.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/Rigidbody.cginc.meta new file mode 100644 index 00000000..68dede37 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/Rigidbody.cginc.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 157a770866f4047a5b8a08e6aca2f1bf +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/RopeChainRendering.compute b/xiaofang/Assets/Obi/Resources/Compute/RopeChainRendering.compute new file mode 100644 index 00000000..57ee32be --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/RopeChainRendering.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/RopeChainRendering.compute.meta new file mode 100644 index 00000000..a80ac9cb --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/RopeChainRendering.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 64a1b58e2d7634b3b905947b0c5e78c7 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/RopeExtrudedRendering.compute b/xiaofang/Assets/Obi/Resources/Compute/RopeExtrudedRendering.compute new file mode 100644 index 00000000..cdcb106c --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/RopeExtrudedRendering.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/RopeExtrudedRendering.compute.meta new file mode 100644 index 00000000..2861b99f --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/RopeExtrudedRendering.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0d389c799c83d43f38f2486ab16fe902 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/RopeLineRendering.compute b/xiaofang/Assets/Obi/Resources/Compute/RopeLineRendering.compute new file mode 100644 index 00000000..8d3582ae --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/RopeLineRendering.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/RopeLineRendering.compute.meta new file mode 100644 index 00000000..05e0afc7 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/RopeLineRendering.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d9fce691efd9941a78e1e74355ec3d84 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/RopeMeshRendering.compute b/xiaofang/Assets/Obi/Resources/Compute/RopeMeshRendering.compute new file mode 100644 index 00000000..f12fc2dc --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/RopeMeshRendering.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/RopeMeshRendering.compute.meta new file mode 100644 index 00000000..fbe83db5 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/RopeMeshRendering.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 68510b7d06c3544fba668628be450928 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/Scan.compute b/xiaofang/Assets/Obi/Resources/Compute/Scan.compute new file mode 100644 index 00000000..dc961d99 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/Scan.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/Scan.compute.meta new file mode 100644 index 00000000..4b20551d --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/Scan.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7124bb82b9af4476c8de8e82d7f8caba +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/ShapeMatchingConstraints.compute b/xiaofang/Assets/Obi/Resources/Compute/ShapeMatchingConstraints.compute new file mode 100644 index 00000000..79d671b3 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/ShapeMatchingConstraints.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/ShapeMatchingConstraints.compute.meta new file mode 100644 index 00000000..ea486ca8 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/ShapeMatchingConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 18ba9336feedf4902b78736cf9abdaa8 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/Simplex.cginc b/xiaofang/Assets/Obi/Resources/Compute/Simplex.cginc new file mode 100644 index 00000000..9fc762e3 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/Simplex.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/Simplex.cginc.meta new file mode 100644 index 00000000..a695ffd7 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/Simplex.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d8eeb7300d95c4653a91d905aaaf5344 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/SkinConstraints.compute b/xiaofang/Assets/Obi/Resources/Compute/SkinConstraints.compute new file mode 100644 index 00000000..c3714990 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/SkinConstraints.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/SkinConstraints.compute.meta new file mode 100644 index 00000000..92eeacff --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/SkinConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2bec2152263654b08b1639ececa4ced6 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/SoftbodyRendering.compute b/xiaofang/Assets/Obi/Resources/Compute/SoftbodyRendering.compute new file mode 100644 index 00000000..1afb27c9 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/SoftbodyRendering.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/SoftbodyRendering.compute.meta new file mode 100644 index 00000000..4ae05f36 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/SoftbodyRendering.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 805ca20f71b034180a1ab0ba707928be +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/Solver.compute b/xiaofang/Assets/Obi/Resources/Compute/Solver.compute new file mode 100644 index 00000000..ad188dc0 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/Solver.compute @@ -0,0 +1,240 @@ +#pragma kernel ApplyInertialForces +#pragma kernel ApplyRigidbodyDeltas +#pragma kernel StoreStartState +#pragma kernel PredictPositions +#pragma kernel UpdateVelocities +#pragma kernel UpdatePositions +#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 R_startPositions; +StructuredBuffer R_endPositions; +StructuredBuffer R_startOrientations; +StructuredBuffer R_endOrientations; + +RWStructuredBuffer positions; +RWStructuredBuffer orientations; +RWStructuredBuffer principalRadii; +RWStructuredBuffer startPositions; +RWStructuredBuffer endPositions; +RWStructuredBuffer startOrientations; +RWStructuredBuffer endOrientations; +RWStructuredBuffer renderablePositions; +RWStructuredBuffer renderableOrientations; +RWStructuredBuffer renderableRadii; +RWStructuredBuffer prevPositions; +RWStructuredBuffer prevOrientations; +RWStructuredBuffer velocities; +RWStructuredBuffer angularVelocities; + +RWStructuredBuffer externalForces; +RWStructuredBuffer externalTorques; + +RWStructuredBuffer linearDeltas; +RWStructuredBuffer angularDeltas; + +// Variables set from the CPU +uint particleCount; + +float deltaTime; +float blendFactor; +float velocityScale; + +float4 angularVel; +float4 inertialAccel; +float4 eulerAccel; + +[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; + } +} + +[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 StoreStartState (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= particleCount) return; + + startPositions[i] = endPositions[i]; + startOrientations[i] = endOrientations[i]; + + endPositions[i] = positions[i]; + endOrientations[i] = orientations[i]; +} + +[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 Interpolate (uint3 id : SV_DispatchThreadID) +{ + unsigned int i = id.x; + if (i >= particleCount) return; + + if (interpolation == 1) + { + renderablePositions[i] = lerp(R_startPositions[i], R_endPositions[i], blendFactor); + renderableOrientations[i] = normalize(q_slerp(R_startOrientations[i], R_endOrientations[i], blendFactor)); + renderableRadii[i] = principalRadii[i]; + } + else if (interpolation == 2) + { + renderablePositions[i] = lerp(R_endPositions[i], positions[i], blendFactor); + renderableOrientations[i] = normalize(q_slerp(R_endOrientations[i], orientations[i], blendFactor)); + renderableRadii[i] = principalRadii[i]; + } + else + { + renderablePositions[i] = R_endPositions[i]; + renderableOrientations[i] = normalize(R_endOrientations[i]); + renderableRadii[i] = principalRadii[i]; + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Resources/Compute/Solver.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/Solver.compute.meta new file mode 100644 index 00000000..5e953895 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/Solver.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8f597cb6a5a9e45499d9fd0f6160e5b4 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/SolverParameters.cginc b/xiaofang/Assets/Obi/Resources/Compute/SolverParameters.cginc new file mode 100644 index 00000000..122712f4 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/SolverParameters.cginc @@ -0,0 +1,22 @@ +#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; + +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Resources/Compute/SolverParameters.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/SolverParameters.cginc.meta new file mode 100644 index 00000000..a591ec8c --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/SolverParameters.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 57c61c65170924f0aa225156e164ceb8 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/SortParticleData.compute b/xiaofang/Assets/Obi/Resources/Compute/SortParticleData.compute new file mode 100644 index 00000000..80282cf6 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/SortParticleData.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/SortParticleData.compute.meta new file mode 100644 index 00000000..13aa550a --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/SortParticleData.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9cd8eed4d0d6e45c18941232e855994f +ComputeShaderImporter: + externalObjects: {} + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/SpatialQueries.compute b/xiaofang/Assets/Obi/Resources/Compute/SpatialQueries.compute new file mode 100644 index 00000000..b9db064d --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/SpatialQueries.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/SpatialQueries.compute.meta new file mode 100644 index 00000000..69122c2b --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/SpatialQueries.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dbbb4eb0bd2fa43e08564bf661b00670 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/SphereShape.compute b/xiaofang/Assets/Obi/Resources/Compute/SphereShape.compute new file mode 100644 index 00000000..c88ecfa3 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/SphereShape.compute @@ -0,0 +1,96 @@ +#include "ColliderDefinitions.cginc" +#include "ContactHandling.cginc" +#include "Transform.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; + +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); + } +}; + +[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/xiaofang/Assets/Obi/Resources/Compute/SphereShape.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/SphereShape.compute.meta new file mode 100644 index 00000000..282bd67c --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/SphereShape.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6bde4f5390fee479ba06d6691eb9450b +ComputeShaderImporter: + externalObjects: {} + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/SphereShapeQuery.compute b/xiaofang/Assets/Obi/Resources/Compute/SphereShapeQuery.compute new file mode 100644 index 00000000..cea2c12e --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/SphereShapeQuery.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/SphereShapeQuery.compute.meta new file mode 100644 index 00000000..c8efb5a7 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/SphereShapeQuery.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1b86e67abd0f74accb1c47af5aa6ffbe +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/StitchConstraints.compute b/xiaofang/Assets/Obi/Resources/Compute/StitchConstraints.compute new file mode 100644 index 00000000..e26a380f --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/StitchConstraints.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/StitchConstraints.compute.meta new file mode 100644 index 00000000..bf07c4dc --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/StitchConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9d8b905ab89234f6c9c7774317150282 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/StretchShearConstraints.compute b/xiaofang/Assets/Obi/Resources/Compute/StretchShearConstraints.compute new file mode 100644 index 00000000..5da22d7e --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/StretchShearConstraints.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/StretchShearConstraints.compute.meta new file mode 100644 index 00000000..99b251af --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/StretchShearConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 09e95e8821fe445bf87f0d434d789822 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/SurfacePoint.cginc b/xiaofang/Assets/Obi/Resources/Compute/SurfacePoint.cginc new file mode 100644 index 00000000..e9d25466 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/SurfacePoint.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/SurfacePoint.cginc.meta new file mode 100644 index 00000000..f7b123e2 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/SurfacePoint.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b54db800f0f884467b02edb24ca317d4 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/TetherConstraints.compute b/xiaofang/Assets/Obi/Resources/Compute/TetherConstraints.compute new file mode 100644 index 00000000..cd99220f --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/TetherConstraints.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/TetherConstraints.compute.meta new file mode 100644 index 00000000..280042e3 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/TetherConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dcd2ea33ecfcb4fb0ac44c5a66ea69f8 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/Transform.cginc b/xiaofang/Assets/Obi/Resources/Compute/Transform.cginc new file mode 100644 index 00000000..039279a4 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/Transform.cginc.meta b/xiaofang/Assets/Obi/Resources/Compute/Transform.cginc.meta new file mode 100644 index 00000000..f749fcd8 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/Transform.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7e54b6c6b777643958abffa4510e0518 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/TriangleMeshShape.compute b/xiaofang/Assets/Obi/Resources/Compute/TriangleMeshShape.compute new file mode 100644 index 00000000..619c9302 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/TriangleMeshShape.compute @@ -0,0 +1,208 @@ +#include "ColliderDefinitions.cginc" +#include "ContactHandling.cginc" +#include "Transform.cginc" +#include "Simplex.cginc" +#include "Bounds.cginc" +#include "SolverParameters.cginc" +#include "Optimization.cginc" + +#pragma kernel GenerateContacts + +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; +}; + + +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; + +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); + } + +}; + +[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/xiaofang/Assets/Obi/Resources/Compute/TriangleMeshShape.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/TriangleMeshShape.compute.meta new file mode 100644 index 00000000..a677721a --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/TriangleMeshShape.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a5454af20f9614aa79e51a90271093e3 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/Compute/VolumeConstraints.compute b/xiaofang/Assets/Obi/Resources/Compute/VolumeConstraints.compute new file mode 100644 index 00000000..4f6e3d71 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/Compute/VolumeConstraints.compute.meta b/xiaofang/Assets/Obi/Resources/Compute/VolumeConstraints.compute.meta new file mode 100644 index 00000000..33f05bbe --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/Compute/VolumeConstraints.compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fef3adb748a41466696a32b41ecc8831 +ComputeShaderImporter: + externalObjects: {} + currentAPIMask: 65536 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/DefaultRopeSection.asset b/xiaofang/Assets/Obi/Resources/DefaultRopeSection.asset new file mode 100644 index 00000000..1cd5bb94 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/DefaultRopeSection.asset @@ -0,0 +1,26 @@ +%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: ee7737c43f5734f87be9e49d1bbfba78, type: 3} + m_Name: DefaultRopeSection + m_EditorClassIdentifier: + vertices: + - {x: 1, y: 0} + - {x: 0.70710677, y: 0.70710677} + - {x: -0.00000004371139, y: 1} + - {x: -0.70710677, y: 0.70710677} + - {x: -1, y: -0.00000008742278} + - {x: -0.70710665, y: -0.7071069} + - {x: 0.000000011924881, y: -1} + - {x: 0.707107, y: -0.70710653} + - {x: 1, y: 0.00000017484555} + snapX: 32 + snapY: 32 diff --git a/xiaofang/Assets/Obi/Resources/DefaultRopeSection.asset.meta b/xiaofang/Assets/Obi/Resources/DefaultRopeSection.asset.meta new file mode 100644 index 00000000..989bd9ac --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/DefaultRopeSection.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a0bc36a59515f413e90e10895929c938 +labels: +- ObiRope +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/GUI.meta b/xiaofang/Assets/Obi/Resources/GUI.meta new file mode 100644 index 00000000..63fee6bd --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/GUI.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bd46757354fbf4182af57f2913e20fc1 +folderAsset: yes +timeCreated: 1474532461 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/GUI/ProfilerSkin.guiskin b/xiaofang/Assets/Obi/Resources/GUI/ProfilerSkin.guiskin new file mode 100644 index 00000000..1265b3e6 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/GUI/ProfilerSkin.guiskin @@ -0,0 +1,1494 @@ +%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: 1 + m_Script: {fileID: 12001, guid: 0000000000000000e000000000000000, type: 0} + m_Name: ProfilerSkin + m_EditorClassIdentifier: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_box: + m_Name: box + m_Normal: + m_Background: {fileID: 2800000, guid: 98f1105e6aebd46a1878df08ab79b5d7, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 1 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_button: + m_Name: button + m_Normal: + m_Background: {fileID: 11006, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} + m_Hover: + m_Background: {fileID: 11003, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Active: + m_Background: {fileID: 11002, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnNormal: + m_Background: {fileID: 11005, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9019608, g: 0.9019608, b: 0.9019608, a: 1} + m_OnHover: + m_Background: {fileID: 11004, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnActive: + m_Background: {fileID: 11002, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 6 + m_Right: 6 + m_Top: 6 + m_Bottom: 4 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 6 + m_Right: 6 + m_Top: 3 + m_Bottom: 3 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 4 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_toggle: + m_Name: toggle + m_Normal: + m_Background: {fileID: 11018, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.89112896, g: 0.89112896, b: 0.89112896, a: 1} + m_Hover: + m_Background: {fileID: 11014, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Active: + m_Background: {fileID: 11013, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 11016, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.8901961, g: 0.8901961, b: 0.8901961, a: 1} + m_OnHover: + m_Background: {fileID: 11015, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnActive: + m_Background: {fileID: 11017, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 14 + m_Right: 0 + m_Top: 14 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 15 + m_Right: 0 + m_Top: 3 + m_Bottom: 0 + m_Overflow: + m_Left: -1 + m_Right: 0 + m_Top: -4 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_label: + m_Name: label + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.5882353, g: 0.5882353, b: 0.5882353, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 3 + m_Bottom: 3 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 1 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_textField: + m_Name: textfield + m_Normal: + m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} + m_Hover: + m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnNormal: + m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 3 + m_Right: 3 + m_Top: 3 + m_Bottom: 3 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 0 + m_TextClipping: 1 + m_ImagePosition: 3 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_textArea: + m_Name: textarea + m_Normal: + m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.9019608, g: 0.9019608, b: 0.9019608, a: 1} + m_Hover: + m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 3 + m_Right: 3 + m_Top: 3 + m_Bottom: 3 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 1 + m_RichText: 0 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_window: + m_Name: window + m_Normal: + m_Background: {fileID: 11023, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 11022, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 1, g: 1, b: 1, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 8 + m_Right: 8 + m_Top: 18 + m_Bottom: 8 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 10 + m_Right: 10 + m_Top: 20 + m_Bottom: 10 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 1 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: -18} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalSlider: + m_Name: horizontalslider + m_Normal: + m_Background: {fileID: 11009, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 3 + m_Right: 3 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: -1 + m_Right: -1 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -2 + m_Bottom: -3 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 12 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalSliderThumb: + m_Name: horizontalsliderthumb + m_Normal: + m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 4 + m_Right: 4 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 7 + m_Right: 7 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: -1 + m_Right: -1 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 12 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalSlider: + m_Name: verticalslider + m_Normal: + m_Background: {fileID: 11021, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 3 + m_Bottom: 3 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: -1 + m_Overflow: + m_Left: -2 + m_Right: -3 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 0 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 12 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 1 + m_verticalSliderThumb: + m_Name: verticalsliderthumb + m_Normal: + m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 7 + m_Bottom: 7 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: -1 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 12 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 1 + m_horizontalScrollbar: + m_Name: horizontalscrollbar + m_Normal: + m_Background: {fileID: 2800000, guid: a3476527001d2494a88fa4236e8dbf0b, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 9 + m_Right: 9 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 4 + m_Right: 4 + m_Top: 0 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 10 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalScrollbarThumb: + m_Name: horizontalscrollbarthumb + m_Normal: + m_Background: {fileID: 2800000, guid: 06f4c4a011cc740c08e92ac6806b7353, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 3 + m_Right: 3 + m_Top: 3 + m_Bottom: 3 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 6 + m_Right: 6 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 10 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalScrollbarLeftButton: + m_Name: horizontalscrollbarleftbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_horizontalScrollbarRightButton: + m_Name: horizontalscrollbarrightbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalScrollbar: + m_Name: verticalscrollbar + m_Normal: + m_Background: {fileID: 2800000, guid: a3476527001d2494a88fa4236e8dbf0b, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 9 + m_Bottom: 9 + m_Margin: + m_Left: 0 + m_Right: 4 + m_Top: 4 + m_Bottom: 4 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 1 + m_Bottom: 1 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 10 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalScrollbarThumb: + m_Name: verticalscrollbarthumb + m_Normal: + m_Background: {fileID: 2800000, guid: 06f4c4a011cc740c08e92ac6806b7353, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 6 + m_Right: 6 + m_Top: 6 + m_Bottom: 6 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 6 + m_Bottom: 6 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 2 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 10 + m_FixedHeight: 0 + m_StretchWidth: 0 + m_StretchHeight: 1 + m_verticalScrollbarUpButton: + m_Name: verticalscrollbarupbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_verticalScrollbarDownButton: + m_Name: verticalscrollbardownbutton + m_Normal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_ScrollView: + m_Name: scrollview + m_Normal: + m_Background: {fileID: 2800000, guid: a3476527001d2494a88fa4236e8dbf0b, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Hover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Active: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Focused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnNormal: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnHover: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnActive: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_OnFocused: + m_Background: {fileID: 0} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0, g: 0, b: 0, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 0} + m_FontSize: 0 + m_FontStyle: 0 + m_Alignment: 0 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_CustomStyles: + - m_Name: Task + m_Normal: + m_Background: {fileID: 2800000, guid: c237f5e557ded47598c1e8e4c650aeda, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_Hover: + m_Background: {fileID: 2800000, guid: c237f5e557ded47598c1e8e4c650aeda, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: c237f5e557ded47598c1e8e4c650aeda, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_Focused: + m_Background: {fileID: 2800000, guid: c237f5e557ded47598c1e8e4c650aeda, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_OnNormal: + m_Background: {fileID: 2800000, guid: c237f5e557ded47598c1e8e4c650aeda, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_OnHover: + m_Background: {fileID: 2800000, guid: c237f5e557ded47598c1e8e4c650aeda, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_OnActive: + m_Background: {fileID: 2800000, guid: c237f5e557ded47598c1e8e4c650aeda, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_OnFocused: + m_Background: {fileID: 2800000, guid: c237f5e557ded47598c1e8e4c650aeda, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_Border: + m_Left: 2 + m_Right: 2 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 11 + m_FontStyle: 0 + m_Alignment: 4 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + - m_Name: Thread + m_Normal: + m_Background: {fileID: 2800000, guid: 8b6df8323f27749f58cbd0563786435b, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_Hover: + m_Background: {fileID: 2800000, guid: 8b6df8323f27749f58cbd0563786435b, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_Active: + m_Background: {fileID: 2800000, guid: 8b6df8323f27749f58cbd0563786435b, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_Focused: + m_Background: {fileID: 2800000, guid: 8b6df8323f27749f58cbd0563786435b, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_OnNormal: + m_Background: {fileID: 2800000, guid: 8b6df8323f27749f58cbd0563786435b, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_OnHover: + m_Background: {fileID: 2800000, guid: 8b6df8323f27749f58cbd0563786435b, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_OnActive: + m_Background: {fileID: 2800000, guid: 8b6df8323f27749f58cbd0563786435b, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_OnFocused: + m_Background: {fileID: 2800000, guid: 8b6df8323f27749f58cbd0563786435b, type: 3} + m_ScaledBackgrounds: [] + m_TextColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_Border: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Margin: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Overflow: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 11 + m_FontStyle: 0 + m_Alignment: 4 + m_WordWrap: 0 + m_RichText: 1 + m_TextClipping: 1 + m_ImagePosition: 0 + m_ContentOffset: {x: 0, y: 0} + m_FixedWidth: 0 + m_FixedHeight: 0 + m_StretchWidth: 1 + m_StretchHeight: 0 + m_Settings: + m_DoubleClickSelectsWord: 1 + m_TripleClickSelectsLine: 1 + m_CursorColor: {r: 1, g: 1, b: 1, a: 1} + m_CursorFlashSpeed: -1 + m_SelectionColor: {r: 1, g: 0.38403907, b: 0, a: 0.7} diff --git a/xiaofang/Assets/Obi/Resources/GUI/ProfilerSkin.guiskin.meta b/xiaofang/Assets/Obi/Resources/GUI/ProfilerSkin.guiskin.meta new file mode 100644 index 00000000..d8811ce6 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/GUI/ProfilerSkin.guiskin.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b90d3c214c99743b0865fc0e0d1f1a15 +timeCreated: 1474532476 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/GUI/profiler_bck.png b/xiaofang/Assets/Obi/Resources/GUI/profiler_bck.png new file mode 100644 index 00000000..ac91069b Binary files /dev/null and b/xiaofang/Assets/Obi/Resources/GUI/profiler_bck.png differ diff --git a/xiaofang/Assets/Obi/Resources/GUI/profiler_bck.png.meta b/xiaofang/Assets/Obi/Resources/GUI/profiler_bck.png.meta new file mode 100644 index 00000000..b9bd3b48 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/GUI/profiler_bck.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: a3476527001d2494a88fa4236e8dbf0b +timeCreated: 1525627614 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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/xiaofang/Assets/Obi/Resources/GUI/profiler_toolbar.png b/xiaofang/Assets/Obi/Resources/GUI/profiler_toolbar.png new file mode 100644 index 00000000..6c68d6a9 Binary files /dev/null and b/xiaofang/Assets/Obi/Resources/GUI/profiler_toolbar.png differ diff --git a/xiaofang/Assets/Obi/Resources/GUI/profiler_toolbar.png.meta b/xiaofang/Assets/Obi/Resources/GUI/profiler_toolbar.png.meta new file mode 100644 index 00000000..eb51c56c --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/GUI/profiler_toolbar.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 98f1105e6aebd46a1878df08ab79b5d7 +timeCreated: 1482234525 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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/xiaofang/Assets/Obi/Resources/GUI/scroll_peg.png b/xiaofang/Assets/Obi/Resources/GUI/scroll_peg.png new file mode 100644 index 00000000..2dcfb17e Binary files /dev/null and b/xiaofang/Assets/Obi/Resources/GUI/scroll_peg.png differ diff --git a/xiaofang/Assets/Obi/Resources/GUI/scroll_peg.png.meta b/xiaofang/Assets/Obi/Resources/GUI/scroll_peg.png.meta new file mode 100644 index 00000000..2a15c9f9 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/GUI/scroll_peg.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 06f4c4a011cc740c08e92ac6806b7353 +timeCreated: 1482234676 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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/xiaofang/Assets/Obi/Resources/GUI/task_bck.png b/xiaofang/Assets/Obi/Resources/GUI/task_bck.png new file mode 100644 index 00000000..2c57a841 Binary files /dev/null and b/xiaofang/Assets/Obi/Resources/GUI/task_bck.png differ diff --git a/xiaofang/Assets/Obi/Resources/GUI/task_bck.png.meta b/xiaofang/Assets/Obi/Resources/GUI/task_bck.png.meta new file mode 100644 index 00000000..8800f14f --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/GUI/task_bck.png.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: c237f5e557ded47598c1e8e4c650aeda +timeCreated: 1474532609 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 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 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/GUI/thread_bck.png b/xiaofang/Assets/Obi/Resources/GUI/thread_bck.png new file mode 100644 index 00000000..8aa68f9a Binary files /dev/null and b/xiaofang/Assets/Obi/Resources/GUI/thread_bck.png differ diff --git a/xiaofang/Assets/Obi/Resources/GUI/thread_bck.png.meta b/xiaofang/Assets/Obi/Resources/GUI/thread_bck.png.meta new file mode 100644 index 00000000..839edd89 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/GUI/thread_bck.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 8b6df8323f27749f58cbd0563786435b +timeCreated: 1525630909 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 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/xiaofang/Assets/Obi/Resources/ObiMaterials.meta b/xiaofang/Assets/Obi/Resources/ObiMaterials.meta new file mode 100644 index 00000000..9f7ccf09 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 40f10b6d47dcf4fe5a4851bad844fa57 +folderAsset: yes +timeCreated: 1445286974 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces.meta b/xiaofang/Assets/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces.meta new file mode 100644 index 00000000..4f530cfd --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 63dbef444f58449a5b4786567ee38655 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces/StandardVertexColors.shader b/xiaofang/Assets/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces/StandardVertexColors.shader new file mode 100644 index 00000000..346c696c --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces/StandardVertexColors.shader @@ -0,0 +1,51 @@ +// Upgrade NOTE: upgraded instancing buffer 'Props' to new syntax. + +Shader "Standard (Vertex Colors)" { + Properties { + _Color ("Color", Color) = (1,1,1,1) + _MainTex ("Albedo (RGB)", 2D) = "white" {} + _Glossiness ("Smoothness", Range(0,1)) = 0.5 + _Metallic ("Metallic", Range(0,1)) = 0.0 + } + SubShader { + Tags { "RenderType"="Opaque" } + LOD 200 + + CGPROGRAM + // Physically based Standard lighting model, and enable shadows on all light types + #pragma surface surf Standard fullforwardshadows + + // Use shader model 3.0 target, to get nicer looking lighting + #pragma target 3.0 + + sampler2D _MainTex; + + struct Input { + float2 uv_MainTex; + float4 vcolor : COLOR; + }; + + half _Glossiness; + half _Metallic; + fixed4 _Color; + + // Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader. + // See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing. + // #pragma instancing_options assumeuniformscaling + UNITY_INSTANCING_BUFFER_START(Props) + // put more per-instance properties here + UNITY_INSTANCING_BUFFER_END(Props) + + void surf (Input IN, inout SurfaceOutputStandard o) { + // Albedo comes from a texture tinted by color + fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color * IN.vcolor; + o.Albedo = c.rgb; + // Metallic and smoothness come from slider variables + o.Metallic = _Metallic; + o.Smoothness = _Glossiness; + o.Alpha = c.a; + } + ENDCG + } + FallBack "Diffuse" +} diff --git a/xiaofang/Assets/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces/StandardVertexColors.shader.meta b/xiaofang/Assets/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces/StandardVertexColors.shader.meta new file mode 100644 index 00000000..c15af572 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces/StandardVertexColors.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 96c602bba0bc94471862812f91285c9a +timeCreated: 1505116095 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/ObiMaterials/Common.meta b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common.meta new file mode 100644 index 00000000..dd79e2da --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f31685c4cf95048ceb543a69d4f84ff4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced.meta b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced.meta new file mode 100644 index 00000000..71d0305c --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b8d28b0e0918140d8b8ee3388bff5ec2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Burst.meta b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Burst.meta new file mode 100644 index 00000000..3bd5233d --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Burst/Instanced.mat b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Burst/Instanced.mat new file mode 100644 index 00000000..933e1d26 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Burst/Instanced.mat @@ -0,0 +1,136 @@ +%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_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _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: [] +--- !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/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Burst/Instanced.mat.meta b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Burst/Instanced.mat.meta new file mode 100644 index 00000000..dd8a2a10 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Burst/Instanced.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6380c47a989d54146bef5f3bac933a56 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute.meta b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute.meta new file mode 100644 index 00000000..90994bc6 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.mat b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.mat new file mode 100644 index 00000000..ba53ce77 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.mat @@ -0,0 +1,95 @@ +%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_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 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: [] diff --git a/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.mat.meta b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.mat.meta new file mode 100644 index 00000000..4264b30d --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2b7dfa8ebb76247318ce5b7df4b97484 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.shadergraph b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.shadergraph new file mode 100644 index 00000000..7396d218 --- /dev/null +++ b/xiaofang/Assets/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": -922.9999389648438, + "y": 17.0, + "width": 249.99993896484376, + "height": 118.0 + } + }, + "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": -1196.0, + "y": 76.0, + "width": 205.99993896484376, + "height": 131.00003051757813 + } + }, + "m_Slots": [ + { + "m_Id": "c9308b0d0e9a4b2eacfd32a0defa35ba" + } + ], + "synonyms": [ + "location" + ], + "m_Precision": 1, + "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": -1093.0, + "y": -33.00001907348633, + "width": 109.99993896484375, + "height": 77.00003051757813 + } + }, + "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": -223.99998474121095, + "width": 269.00006103515627, + "height": 93.99998474121094 + } + }, + "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/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.shadergraph.meta b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.shadergraph.meta new file mode 100644 index 00000000..299e5200 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstancing.cginc b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstancing.cginc new file mode 100644 index 00000000..44c796b3 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstancing.cginc.meta b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstancing.cginc.meta new file mode 100644 index 00000000..68b2e76d --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoids.cginc b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoids.cginc new file mode 100644 index 00000000..63513cb9 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoids.cginc @@ -0,0 +1,103 @@ +#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. +float IntersectEllipsoid(float3 v, float4 mapping, float3 a2, float3 a3, out float3 eyePos, out float3 eyeNormal) +{ + float r2 = dot(mapping.xy, mapping.xy); + float iq = 1 - r2/mapping.w; + clip(iq); // the ray does not intersect the sphere. + + float sqrtiq = sqrt(iq); + float lambda = 1/(1 + mapping.z * sqrtiq); + + eyePos = lambda * v; + eyeNormal = normalize(a2 + lambda * a3); + + // return gaussian-falloff thickness. + 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; + float3x3 IO = float3x3(t0.xyz,t1.xyz,t2.xyz); + float3x3 O = transpose(IO); + + // build 3x3 scaling matrix and its inverse: + 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((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); + 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; + float 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); + + return radius; +} + +void BuildAuxiliaryNormalVectors(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_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/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoids.cginc.meta b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoids.cginc.meta new file mode 100644 index 00000000..f4ed8219 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoids.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 083c49fc96643477889bfd68e70cf998 +timeCreated: 1445285630 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoidsHDRP.cginc b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoidsHDRP.cginc new file mode 100644 index 00000000..e850de75 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoidsHDRP.cginc @@ -0,0 +1,104 @@ +#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); +} + +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/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoidsHDRP.cginc.meta b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoidsHDRP.cginc.meta new file mode 100644 index 00000000..62b29876 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoidsHDRP.cginc.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bc807595df1f54350ac0027aaf7cb91b +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/ObiUtils.cginc b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/ObiUtils.cginc new file mode 100644 index 00000000..bd161f27 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/ObiUtils.cginc @@ -0,0 +1,28 @@ +#ifndef OBIUTILS_INCLUDED +#define OBIUTILS_INCLUDED + +float4x4 _Camera_to_World; + +// abstract texture declaration/sampling over built-in and SRPs: +#ifndef TEXTURE2D +#define TEXTURE2D(name) sampler2D name +#endif + +#ifndef TEXTURE2D_HALF +#define TEXTURE2D_HALF(name) sampler2D_half name +#endif + +#ifndef TEXTURE2D_FLOAT +#define TEXTURE2D_FLOAT(name) sampler2D_float name +#endif + +#ifndef SAMPLE_TEXTURE2D +#define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) tex2D(textureName,coord2) +#endif + +#ifndef SAMPLER +#define SAMPLER(samplerName) +#endif + + +#endif diff --git a/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/ObiUtils.cginc.meta b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/ObiUtils.cginc.meta new file mode 100644 index 00000000..d7668afa --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/ObiUtils.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fe1b10a99f88a45a09abf1a13d62b63f +timeCreated: 1445285630 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/ParticleShader.shadergraph b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/ParticleShader.shadergraph new file mode 100644 index 00000000..4b61fbcd --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/ParticleShader.shadergraph.meta b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/ParticleShader.shadergraph.meta new file mode 100644 index 00000000..59a0a5bc --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Particles.mat b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Particles.mat new file mode 100644 index 00000000..3f9b1b29 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Particles.mat @@ -0,0 +1,123 @@ +%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: 5 +--- !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_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 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: + - _BUILTIN_QueueControl: 0 + - _BUILTIN_QueueOffset: 0 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Glossiness: 0.5 + - _InvFade: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueControl: 0 + - _QueueOffset: 0 + - _RadiusScale: 1 + - _Smoothness: 0.6 + - _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} + - _ParticleColor: {r: 1, g: 1, b: 1, a: 0} + - _TintColor: {r: 0.5, g: 0.5, b: 0.5, a: 0.5} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Particles.mat.meta b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Particles.mat.meta new file mode 100644 index 00000000..c30f265c --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/Particles.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fb88690dea2394644849cde5abd037f9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/particle.png b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/particle.png new file mode 100644 index 00000000..1eea413c Binary files /dev/null and b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/particle.png differ diff --git a/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/particle.png.meta b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/particle.png.meta new file mode 100644 index 00000000..7fc10cac --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/Common/particle.png.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: 568ceb11f52ec4d36abc82bcf61af795 +timeCreated: 1461823723 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + 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 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/ObiMaterials/DistanceFields.meta b/xiaofang/Assets/Obi/Resources/ObiMaterials/DistanceFields.meta new file mode 100644 index 00000000..bbfbc417 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/DistanceFields.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aacd9fe47bf4d416d883fd99066cf37e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldRendering.mat b/xiaofang/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldRendering.mat new file mode 100644 index 00000000..018ddace --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldRendering.mat @@ -0,0 +1,91 @@ +%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: DistanceFieldRendering + m_Shader: {fileID: 4800000, guid: 8447096d1e8064b37939be221dd9afb5, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Volume: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _Absorption: 1 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _MaxSteps: 300 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _StepSize: 0.01 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _AABBMax: {r: 0.5, g: 0.5, b: 0.5, a: 1} + - _AABBMin: {r: -0.5, g: -0.5, b: -0.5, a: 1} + - _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: [] diff --git a/xiaofang/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldRendering.mat.meta b/xiaofang/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldRendering.mat.meta new file mode 100644 index 00000000..51f5da28 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldRendering.mat.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f6bf1245292ed43c78875db43ca1aad3 +timeCreated: 1515780549 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldSlice.shader b/xiaofang/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldSlice.shader new file mode 100644 index 00000000..cbcc6f96 --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldSlice.shader @@ -0,0 +1,66 @@ +Shader "Obi/DistanceFieldSlice" +{ + Properties + { + _MainTex ("Texture", 2D) = "white" {} + } + SubShader + { + Tags { "RenderType"="Opaque" } + LOD 100 + + Cull Off + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct v2f + { + float2 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + }; + + sampler2D _MainTex; + float4 _MainTex_ST; + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = TRANSFORM_TEX(v.uv, _MainTex); + return o; + } + + half4 frag (v2f i) : SV_Target + { + half dist = tex2D(_MainTex, i.uv).x-0.5; // signed distance + half adist = abs(dist); // absolute distance + half isofunc = sin(adist*40); // isolines function + + // antialiased isolines: + half change = fwidth(isofunc); + half isolines = smoothstep(-change,change,isofunc); + + // antialiazed sign: + change = fwidth(dist); + half sign = smoothstep(-change,change,dist); + + half final = (1-adist) * (0.85+isolines*0.15); + + return half4(final,final*sign,final*sign,1); + } + ENDCG + } + } +} diff --git a/xiaofang/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldSlice.shader.meta b/xiaofang/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldSlice.shader.meta new file mode 100644 index 00000000..e48de3bb --- /dev/null +++ b/xiaofang/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldSlice.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8447096d1e8064b37939be221dd9afb5 +timeCreated: 1515783007 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples.meta b/xiaofang/Assets/Obi/Samples.meta new file mode 100644 index 00000000..086e2007 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3a2242974391642bcb80ee2090380780 +folderAsset: yes +timeCreated: 1435569439 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common.meta b/xiaofang/Assets/Obi/Samples/Common.meta new file mode 100644 index 00000000..7f1f79bf --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: db16dd818bde540c6a87fa0d2863c26a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources.meta new file mode 100644 index 00000000..34abbc2c --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dbcc2a84318854b0096382cb83b32e9f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations.meta new file mode 100644 index 00000000..9ccfd3f0 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 00e8d42e857fb4adcb53914d0948b16c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/FanHorizontal.anim b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/FanHorizontal.anim new file mode 100644 index 00000000..933dadfa --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/FanHorizontal.anim @@ -0,0 +1,205 @@ +%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 + 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: + - 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} + - 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} + - 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} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 1 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/FanHorizontal.anim.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/FanHorizontal.anim.meta new file mode 100644 index 00000000..af40a9d2 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/FanHorizontal.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8e33f749f1d024f159aa5cae7a502d72 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/FanRoot.controller b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/FanRoot.controller new file mode 100644 index 00000000..abdf16d8 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/FanRoot.controller.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/FanRoot.controller.meta new file mode 100644 index 00000000..3ec02df0 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/FanRoot.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 07415f30e4149416b920c1da07bdc3b7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidCrouch.fbx b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidCrouch.fbx new file mode 100644 index 00000000..6bbd1c36 Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidCrouch.fbx differ diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidCrouch.fbx.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidCrouch.fbx.meta new file mode 100644 index 00000000..a307593f --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidCrouch.fbx.meta @@ -0,0 +1,1606 @@ +fileFormatVersion: 2 +guid: d89ea37480b6d75458aa38843e9688dc +labels: +- ObiCloth +- ObiRope +- ObiSoftbody +ModelImporter: + 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: + materialImportMode: 0 + materialName: 1 + materialSearch: 2 + materialLocation: 0 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: + - serializedVersion: 16 + name: HumanoidCrouchIdle + takeName: Take 001 + internalID: 0 + firstFrame: 264 + lastFrame: 319 + wrapMode: 0 + orientationOffsetY: -38 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 1 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 0 + heightFromFeet: 1 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 0 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + - serializedVersion: 16 + name: HumanoidCrouchWalk + takeName: Take 001 + internalID: 0 + firstFrame: 105 + lastFrame: 159 + wrapMode: 0 + orientationOffsetY: -38 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 1 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + 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: 0.3 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 1 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + 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: 0.71 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 0 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + - serializedVersion: 16 + name: HumanoidCrouchTurnRight + takeName: Take 001 + internalID: 0 + firstFrame: 1932 + lastFrame: 1976 + wrapMode: 0 + orientationOffsetY: -38 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 0 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + - serializedVersion: 16 + name: HumanoidCrouchTurnLeft + takeName: Take 001 + internalID: 0 + firstFrame: 1932 + lastFrame: 1976 + wrapMode: 0 + orientationOffsetY: 38 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 1 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 0 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + - serializedVersion: 16 + name: HumanoidCrouchWalkRightB + takeName: Take 001 + internalID: 0 + firstFrame: 1542 + lastFrame: 1610 + wrapMode: 0 + orientationOffsetY: 38 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 1 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 0 + maskSource: {instanceID: 0} + 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 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + 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: 0.07488092, y: 0, z: 0.03744046} + length: 0.09360118 + modified: 1 + - boneName: LeftUpLeg + humanName: LeftUpperLeg + limit: + 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.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: 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: 0.33868623, y: 0, z: 0.16934311} + length: 0.42335793 + modified: 1 + - boneName: LeftFoot + humanName: LeftFoot + limit: + 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.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: 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: 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: 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: 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.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.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.000004} + max: {x: 90, y: 100, z: 100} + 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.000004} + max: {x: 90, y: 100, z: 100} + 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 0.01678096, y: 0, z: 0.00839048} + length: 0.020976208 + modified: 1 + - boneName: LeftHandMiddle1 + humanName: Left Middle Proximal + limit: + 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: 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: 0.020378849, y: 0, z: 0.010189424} + length: 0.025473569 + modified: 1 + - boneName: LeftHandRing1 + humanName: Left Ring Proximal + limit: + 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 0.01678104, y: 0, z: 0.00839052} + length: 0.020976309 + modified: 1 + - boneName: RightHandMiddle1 + humanName: Right Middle Proximal + limit: + 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: 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: 0.02037891, y: 0, z: 0.010189455} + length: 0.025473647 + modified: 1 + - boneName: RightHandRing1 + humanName: Right Ring Proximal + limit: + 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: 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: 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: 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: 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: 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: 0.99999994} + scale: {x: 1, y: 1, z: 1} + - name: Reference + parentName: + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: 0, w: 0.99999994} + scale: {x: 1, y: 1, z: 1} + - name: Hips + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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} + - name: LeftCheek + 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} + - name: RightCheek + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdle.fbx b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdle.fbx new file mode 100644 index 00000000..4ae25cb2 Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdle.fbx differ diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdle.fbx.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdle.fbx.meta new file mode 100644 index 00000000..64095f57 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdle.fbx.meta @@ -0,0 +1,2376 @@ +fileFormatVersion: 2 +guid: dffa50cfe77e0434bbfa71245b3dd529 +labels: +- ObiCloth +- ObiRope +- ObiSoftbody +ModelImporter: + 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: + materialImportMode: 0 + materialName: 1 + materialSearch: 2 + materialLocation: 0 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: + - serializedVersion: 16 + name: HumanoidIdle + takeName: _87_a_U1_M_P_idle_Neutral__Fb_p0_No_1 + internalID: 0 + firstFrame: 445 + lastFrame: 517 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 1 + loopBlendPositionY: 1 + loopBlendPositionXZ: 1 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 0 + maskSource: {instanceID: 0} + 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 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: + - boneName: Hips + humanName: Hips + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftUpLeg + humanName: LeftUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightUpLeg + humanName: RightUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftLeg + humanName: LeftLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightLeg + humanName: RightLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFoot + humanName: LeftFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFoot + humanName: RightFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Spine + humanName: Spine + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Chest + humanName: Chest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Neck + humanName: Neck + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Head + humanName: Head + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftShoulder + humanName: LeftShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightShoulder + humanName: RightShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftArm + humanName: LeftUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightArm + humanName: RightUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftForeArm + humanName: LeftLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightForeArm + humanName: RightLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHand + humanName: LeftHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHand + humanName: RightHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftToes + humanName: LeftToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightToes + humanName: RightToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftEye + humanName: LeftEye + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightEye + humanName: RightEye + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Jaw + humanName: Jaw + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb1 + humanName: Left Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb2 + humanName: Left Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb3 + humanName: Left Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex1 + humanName: Left Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex2 + humanName: Left Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex3 + humanName: Left Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle1 + humanName: Left Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle2 + humanName: Left Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle3 + humanName: Left Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing1 + humanName: Left Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing2 + humanName: Left Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing3 + humanName: Left Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky1 + humanName: Left Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky2 + humanName: Left Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky3 + humanName: Left Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb1 + humanName: Right Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb2 + humanName: Right Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb3 + humanName: Right Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex1 + humanName: Right Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex2 + humanName: Right Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex3 + humanName: Right Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle1 + humanName: Right Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle2 + humanName: Right Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle3 + humanName: Right Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing1 + humanName: Right Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing2 + humanName: Right Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing3 + humanName: Right Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky1 + humanName: Right Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky2 + humanName: Right Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky3 + humanName: Right Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + 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} + - name: Hips + 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - name: LeftShoulder + 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} + - name: LeftArm + 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} + - name: LeftForeArm + 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} + - 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} + - name: LeftHandIndex1 + 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} + - name: LeftHandIndex2 + 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} + - 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} + - name: LeftHandMiddle1 + 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} + - name: LeftHandMiddle2 + 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} + - 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} + - name: LeftHandPinky1 + 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} + - name: LeftHandPinky2 + 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} + - 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} + - name: LeftHandRing1 + 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} + - name: LeftHandRing2 + 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} + - name: LeftHandRing3 + 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} + - name: LeftHandThumb1 + 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} + - name: LeftHandThumb2 + 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - name: RightShoulder + 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} + - name: RightArm + 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} + - name: RightForeArm + 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} + - 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} + - name: RightHandIndex1 + 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} + - name: RightHandIndex2 + 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} + - 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} + - name: RightHandMiddle1 + 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} + - name: RightHandMiddle2 + 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} + - 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} + - name: RightHandPinky1 + 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} + - name: RightHandPinky2 + 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} + - 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} + - name: RightHandRing1 + 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} + - name: RightHandRing2 + 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} + - 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} + - name: RightHandThumb1 + 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} + - name: RightHandThumb2 + 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} + - 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} + 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/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdleJumpUp.fbx b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdleJumpUp.fbx new file mode 100644 index 00000000..46919337 Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdleJumpUp.fbx differ diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdleJumpUp.fbx.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdleJumpUp.fbx.meta new file mode 100644 index 00000000..77ccf6a4 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdleJumpUp.fbx.meta @@ -0,0 +1,3389 @@ +fileFormatVersion: 2 +guid: 0d9d26e2162aa4d11ab075b34c029673 +labels: +- ObiCloth +- ObiRope +- ObiSoftbody +ModelImporter: + 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___207_Idle_JumpUpMedium_NoHands1Step_Idle + - first: + 74: 7400002 + second: HumanoidIdleJumpUp + - first: + 74: 7400004 + second: HumanoidFall + - first: + 74: 7400006 + second: HumanoidJumpUp + - first: + 74: 7400008 + second: HumanoidMidAir + - first: + 95: 9500000 + second: //RootNode + - first: + 111: 11100000 + second: //RootNode + externalObjects: {} + materials: + materialImportMode: 0 + materialName: 1 + materialSearch: 2 + materialLocation: 0 + animations: + legacyGenerateAnimations: 3 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: + - serializedVersion: 16 + name: HumanoidIdleJumpUp + takeName: _207_Idle_JumpUpMedium_NoHands1Step_Idle + internalID: 0 + firstFrame: 56 + lastFrame: 233 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: + - path: + weight: 0 + maskType: 0 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + - serializedVersion: 16 + name: HumanoidFall + takeName: _207_Idle_JumpUpMedium_NoHands1Step_Idle + internalID: 0 + firstFrame: 127 + lastFrame: 129 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 1 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 0 + heightFromFeet: 1 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: + - path: + weight: 1 + - path: Reference + weight: 1 + - path: Reference/Hips + weight: 1 + - path: Reference/Hips/LeftUpLeg + weight: 1 + - path: Reference/Hips/LeftUpLeg/l_hipProxy_geo + weight: 0 + - path: Reference/Hips/LeftUpLeg/LeftLeg + weight: 1 + - path: Reference/Hips/LeftUpLeg/LeftLeg/l_kneeProxy_geo + weight: 0 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot + weight: 1 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot/l_ankleProxy_geo + weight: 0 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot/LeftToes + weight: 1 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot/LeftToes/l_ballProxy_geo + weight: 0 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot/LeftToes/LToeBase_End2 + weight: 0 + - path: Reference/Hips/pelvisProxy_geo + weight: 0 + - path: Reference/Hips/RightUpLeg + weight: 1 + - path: Reference/Hips/RightUpLeg/r_hipProxy_geo + weight: 0 + - path: Reference/Hips/RightUpLeg/RightLeg + weight: 1 + - path: Reference/Hips/RightUpLeg/RightLeg/r_kneeProxy_geo + weight: 0 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot + weight: 1 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot/r_ankleProxy_geo + weight: 0 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot/RightToes + weight: 1 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot/RightToes/LToeBase_End3 + weight: 0 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot/RightToes/r_ballProxy_geo + weight: 0 + - path: Reference/Hips/Spine + weight: 1 + - path: Reference/Hips/Spine/Chest + weight: 1 + - path: Reference/Hips/Spine/Chest/chestProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/l_clavicleProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/l_shourderProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/l_erbowProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/l_wristProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/l_indexProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2/l_indexProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2/LeftHandIndex3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2/LeftHandIndex3/l_indexProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2/LeftHandIndex3/LeftHandIndex13 + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/l_middleProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2/l_middleProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2/LeftHandMiddle3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2/LeftHandMiddle3/l_middleProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2/LeftHandMiddle3/LeftHandMiddle13 + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/l_pinkyProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2/l_pinkyProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2/LeftHandPinky3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2/LeftHandPinky3/l_pinkyProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2/LeftHandPinky3/LeftHandPinky13 + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/l_ringProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2/l_ringProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2/LeftHandRing3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2/LeftHandRing3/l_ringProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2/LeftHandRing3/LeftHandRing13 + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/l_thumbProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2/l_thumbProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2/LeftHandThumb3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2/LeftHandThumb3/l_thumbProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2/LeftHandThumb3/LeftHandThumb13 + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/headProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/HeadTop_End + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/JawEND + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/jawProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/LeftLipCorner + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/LeftLipLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/RightLipCorner + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/RightLipLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/TongueBack + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/TongueBack/UNI_01_TongueBaseProxy + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/TongueTip + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/TongueTip/UNI_01_TongueTipProxy + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/UNI_01_Lower_teethProxy + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftCheek + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEye + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEye/l_UNI_eye + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEyelidLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEyelidUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftInnerBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftIOuterBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftLipUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftNostril + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightCheek + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEye + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEye/r_UNI_eye + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEyelidLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEyelidUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightInnerBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightIOuterBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightLipUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightNostril + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/UNI_01_Upper_teethProxy + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/neckProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/r_clavicleProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/r_shourderProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/r_erbowProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/r_wristProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/r_indexProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2/r_indexProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2/RightHandIndex3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2/RightHandIndex3/LeftHandIndex17 + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2/RightHandIndex3/r_indexProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/r_middleProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2/r_middleProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2/RightHandMiddle3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2/RightHandMiddle3/LeftHandMiddle17 + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2/RightHandMiddle3/r_middleProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/r_pinkyProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2/r_pinkyProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2/RightHandPinky3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2/RightHandPinky3/LeftHandPinky17 + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2/RightHandPinky3/r_pinkyProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/r_ringProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2/r_ringProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2/RightHandRing3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2/RightHandRing3/LeftHandRing17 + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2/RightHandRing3/r_ringProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/r_thumbProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2/r_thumbProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2/RightHandThumb3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2/RightHandThumb3/LeftHandThumb17 + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2/RightHandThumb3/r_thumbProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/spineProxy_geo + weight: 0 + maskType: 0 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + - serializedVersion: 16 + name: HumanoidJumpUp + takeName: _207_Idle_JumpUpMedium_NoHands1Step_Idle + internalID: 0 + firstFrame: 125 + lastFrame: 127 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: + - path: + weight: 1 + - path: Reference + weight: 1 + - path: Reference/Hips + weight: 1 + - path: Reference/Hips/LeftUpLeg + weight: 1 + - path: Reference/Hips/LeftUpLeg/l_hipProxy_geo + weight: 0 + - path: Reference/Hips/LeftUpLeg/LeftLeg + weight: 1 + - path: Reference/Hips/LeftUpLeg/LeftLeg/l_kneeProxy_geo + weight: 0 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot + weight: 1 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot/l_ankleProxy_geo + weight: 0 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot/LeftToes + weight: 1 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot/LeftToes/l_ballProxy_geo + weight: 0 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot/LeftToes/LToeBase_End2 + weight: 0 + - path: Reference/Hips/pelvisProxy_geo + weight: 0 + - path: Reference/Hips/RightUpLeg + weight: 1 + - path: Reference/Hips/RightUpLeg/r_hipProxy_geo + weight: 0 + - path: Reference/Hips/RightUpLeg/RightLeg + weight: 1 + - path: Reference/Hips/RightUpLeg/RightLeg/r_kneeProxy_geo + weight: 0 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot + weight: 1 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot/r_ankleProxy_geo + weight: 0 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot/RightToes + weight: 1 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot/RightToes/LToeBase_End3 + weight: 0 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot/RightToes/r_ballProxy_geo + weight: 0 + - path: Reference/Hips/Spine + weight: 1 + - path: Reference/Hips/Spine/Chest + weight: 1 + - path: Reference/Hips/Spine/Chest/chestProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/l_clavicleProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/l_shourderProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/l_erbowProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/l_wristProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/l_indexProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2/l_indexProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2/LeftHandIndex3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2/LeftHandIndex3/l_indexProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2/LeftHandIndex3/LeftHandIndex13 + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/l_middleProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2/l_middleProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2/LeftHandMiddle3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2/LeftHandMiddle3/l_middleProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2/LeftHandMiddle3/LeftHandMiddle13 + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/l_pinkyProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2/l_pinkyProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2/LeftHandPinky3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2/LeftHandPinky3/l_pinkyProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2/LeftHandPinky3/LeftHandPinky13 + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/l_ringProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2/l_ringProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2/LeftHandRing3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2/LeftHandRing3/l_ringProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2/LeftHandRing3/LeftHandRing13 + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/l_thumbProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2/l_thumbProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2/LeftHandThumb3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2/LeftHandThumb3/l_thumbProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2/LeftHandThumb3/LeftHandThumb13 + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/headProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/HeadTop_End + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/JawEND + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/jawProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/LeftLipCorner + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/LeftLipLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/RightLipCorner + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/RightLipLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/TongueBack + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/TongueBack/UNI_01_TongueBaseProxy + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/TongueTip + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/TongueTip/UNI_01_TongueTipProxy + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/UNI_01_Lower_teethProxy + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftCheek + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEye + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEye/l_UNI_eye + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEyelidLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEyelidUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftInnerBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftIOuterBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftLipUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftNostril + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightCheek + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEye + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEye/r_UNI_eye + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEyelidLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEyelidUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightInnerBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightIOuterBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightLipUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightNostril + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/UNI_01_Upper_teethProxy + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/neckProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/r_clavicleProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/r_shourderProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/r_erbowProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/r_wristProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/r_indexProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2/r_indexProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2/RightHandIndex3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2/RightHandIndex3/LeftHandIndex17 + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2/RightHandIndex3/r_indexProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/r_middleProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2/r_middleProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2/RightHandMiddle3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2/RightHandMiddle3/LeftHandMiddle17 + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2/RightHandMiddle3/r_middleProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/r_pinkyProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2/r_pinkyProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2/RightHandPinky3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2/RightHandPinky3/LeftHandPinky17 + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2/RightHandPinky3/r_pinkyProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/r_ringProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2/r_ringProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2/RightHandRing3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2/RightHandRing3/LeftHandRing17 + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2/RightHandRing3/r_ringProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/r_thumbProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2/r_thumbProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2/RightHandThumb3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2/RightHandThumb3/LeftHandThumb17 + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2/RightHandThumb3/r_thumbProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/spineProxy_geo + weight: 0 + maskType: 0 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + - serializedVersion: 16 + name: HumanoidMidAir + takeName: _207_Idle_JumpUpMedium_NoHands1Step_Idle + internalID: 0 + firstFrame: 131 + lastFrame: 133 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: + - path: + weight: 1 + - path: Reference + weight: 1 + - path: Reference/Hips + weight: 1 + - path: Reference/Hips/LeftUpLeg + weight: 1 + - path: Reference/Hips/LeftUpLeg/l_hipProxy_geo + weight: 0 + - path: Reference/Hips/LeftUpLeg/LeftLeg + weight: 1 + - path: Reference/Hips/LeftUpLeg/LeftLeg/l_kneeProxy_geo + weight: 0 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot + weight: 1 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot/l_ankleProxy_geo + weight: 0 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot/LeftToes + weight: 1 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot/LeftToes/l_ballProxy_geo + weight: 0 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot/LeftToes/LToeBase_End2 + weight: 0 + - path: Reference/Hips/pelvisProxy_geo + weight: 0 + - path: Reference/Hips/RightUpLeg + weight: 1 + - path: Reference/Hips/RightUpLeg/r_hipProxy_geo + weight: 0 + - path: Reference/Hips/RightUpLeg/RightLeg + weight: 1 + - path: Reference/Hips/RightUpLeg/RightLeg/r_kneeProxy_geo + weight: 0 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot + weight: 1 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot/r_ankleProxy_geo + weight: 0 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot/RightToes + weight: 1 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot/RightToes/LToeBase_End3 + weight: 0 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot/RightToes/r_ballProxy_geo + weight: 0 + - path: Reference/Hips/Spine + weight: 1 + - path: Reference/Hips/Spine/Chest + weight: 1 + - path: Reference/Hips/Spine/Chest/chestProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/l_clavicleProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/l_shourderProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/l_erbowProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/l_wristProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/l_indexProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2/l_indexProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2/LeftHandIndex3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2/LeftHandIndex3/l_indexProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2/LeftHandIndex3/LeftHandIndex13 + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/l_middleProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2/l_middleProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2/LeftHandMiddle3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2/LeftHandMiddle3/l_middleProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2/LeftHandMiddle3/LeftHandMiddle13 + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/l_pinkyProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2/l_pinkyProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2/LeftHandPinky3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2/LeftHandPinky3/l_pinkyProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2/LeftHandPinky3/LeftHandPinky13 + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/l_ringProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2/l_ringProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2/LeftHandRing3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2/LeftHandRing3/l_ringProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2/LeftHandRing3/LeftHandRing13 + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/l_thumbProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2/l_thumbProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2/LeftHandThumb3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2/LeftHandThumb3/l_thumbProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2/LeftHandThumb3/LeftHandThumb13 + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/headProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/HeadTop_End + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/JawEND + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/jawProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/LeftLipCorner + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/LeftLipLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/RightLipCorner + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/RightLipLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/TongueBack + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/TongueBack/UNI_01_TongueBaseProxy + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/TongueTip + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/TongueTip/UNI_01_TongueTipProxy + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/UNI_01_Lower_teethProxy + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftCheek + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEye + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEye/l_UNI_eye + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEyelidLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEyelidUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftInnerBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftIOuterBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftLipUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftNostril + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightCheek + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEye + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEye/r_UNI_eye + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEyelidLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEyelidUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightInnerBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightIOuterBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightLipUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightNostril + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/UNI_01_Upper_teethProxy + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/neckProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/r_clavicleProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/r_shourderProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/r_erbowProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/r_wristProxy_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/r_indexProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2/r_indexProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2/RightHandIndex3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2/RightHandIndex3/LeftHandIndex17 + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2/RightHandIndex3/r_indexProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/r_middleProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2/r_middleProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2/RightHandMiddle3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2/RightHandMiddle3/LeftHandMiddle17 + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2/RightHandMiddle3/r_middleProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/r_pinkyProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2/r_pinkyProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2/RightHandPinky3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2/RightHandPinky3/LeftHandPinky17 + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2/RightHandPinky3/r_pinkyProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/r_ringProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2/r_ringProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2/RightHandRing3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2/RightHandRing3/LeftHandRing17 + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2/RightHandRing3/r_ringProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/r_thumbProxy_01_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2/r_thumbProxy_02_geo + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2/RightHandThumb3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2/RightHandThumb3/LeftHandThumb17 + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2/RightHandThumb3/r_thumbProxy_03_geo + weight: 0 + - path: Reference/Hips/Spine/spineProxy_geo + weight: 0 + maskType: 0 + maskSource: {instanceID: 0} + 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 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: + - boneName: Hips + humanName: Hips + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftUpLeg + humanName: LeftUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightUpLeg + humanName: RightUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftLeg + humanName: LeftLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightLeg + humanName: RightLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFoot + humanName: LeftFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFoot + humanName: RightFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Spine + humanName: Spine + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Chest + humanName: Chest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Neck + humanName: Neck + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Head + humanName: Head + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftShoulder + humanName: LeftShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightShoulder + humanName: RightShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftArm + humanName: LeftUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightArm + humanName: RightUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftForeArm + humanName: LeftLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightForeArm + humanName: RightLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHand + humanName: LeftHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHand + humanName: RightHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftToes + humanName: LeftToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightToes + humanName: RightToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Jaw + humanName: Jaw + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb1 + humanName: Left Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb2 + humanName: Left Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb3 + humanName: Left Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex1 + humanName: Left Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex2 + humanName: Left Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex3 + humanName: Left Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle1 + humanName: Left Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle2 + humanName: Left Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle3 + humanName: Left Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing1 + humanName: Left Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing2 + humanName: Left Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing3 + humanName: Left Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky1 + humanName: Left Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky2 + humanName: Left Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky3 + humanName: Left Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb1 + humanName: Right Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb2 + humanName: Right Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb3 + humanName: Right Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex1 + humanName: Right Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex2 + humanName: Right Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex3 + humanName: Right Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle1 + humanName: Right Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle2 + humanName: Right Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle3 + humanName: Right Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing1 + humanName: Right Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing2 + humanName: Right Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing3 + humanName: Right Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky1 + humanName: Right Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky2 + humanName: Right Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky3 + humanName: Right Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + skeleton: + - name: IdleJumpAndFall(Clone) + parentName: + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Hips + parentName: + position: {x: 0, y: 0.968898, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: LeftUpLeg + 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} + - 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} + - 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} + - 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} + - name: LToeBase_End2 + 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} + - name: RightUpLeg + 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} + - 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} + - 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} + - 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} + - name: LToeBase_End3 + 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} + - name: Spine + 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} + - 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} + - name: LeftShoulder + parentName: + position: {x: -0.038285997, y: 0.2216225, z: -0.017063085} + rotation: {x: 0.013628214, y: -0.0033451605, z: 0.16034958, w: 0.98696053} + scale: {x: 1, y: 1, z: 1} + - name: LeftArm + parentName: + position: {x: -0.10050205, y: 8.5265126e-16, z: -1.9184653e-15} + rotation: {x: 0.37591177, y: -0.054592364, z: -0.13171308, w: 0.915621} + scale: {x: 1, y: 1, z: 1} + - name: LeftForeArm + parentName: + position: {x: -0.2540493, y: -5.6772363e-14, z: -7.7463367e-13} + rotation: {x: -0.03333591, y: 0.020644123, z: -0.01734835, w: 0.99908036} + scale: {x: 1, y: 1, z: 1} + - name: LeftHand + 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} + - name: LeftHandIndex1 + parentName: + position: {x: -0.0751258, y: -0.0078414045, z: 0.032652643} + rotation: {x: -0.030835044, y: 0.017968778, z: 0.08719326, w: 0.99555194} + scale: {x: 1, y: 1, z: 1} + - name: LeftHandIndex2 + parentName: + position: {x: -0.03979728, y: 0.000049808405, z: 0.0011857504} + rotation: {x: -0.06893383, y: 0.014713662, z: 0.027949251, w: 0.9971211} + scale: {x: 1, y: 1, z: 1} + - name: LeftHandIndex3 + parentName: + position: {x: -0.027968477, y: -0.000000006283088, z: -0.00000005172172} + rotation: {x: -0.00000019837171, y: 0.07579723, z: 0.08633665, w: 0.9933785} + scale: {x: 1, y: 1, z: 1} + - name: LeftHandIndex13 + 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} + - name: LeftHandMiddle1 + parentName: + position: {x: -0.076023825, y: -0.0018851344, z: 0.010141229} + rotation: {x: -0.01571757, y: 0.053721238, z: 0.08647313, w: 0.9946805} + scale: {x: 1, y: 1, z: 1} + - name: LeftHandMiddle2 + parentName: + position: {x: -0.044280436, y: 0.0000047988738, z: -0.00042540013} + rotation: {x: -0.008446485, y: -0.006292184, z: 0.026998896, w: 0.99957997} + scale: {x: 1, y: 1, z: 1} + - name: LeftHandMiddle3 + parentName: + position: {x: -0.033964828, y: -0.000000012198452, z: 0.000000003751609} + rotation: {x: 0, y: 0.008562216, z: 0.060155462, w: 0.9981523} + scale: {x: 1, y: 1, z: 1} + - name: LeftHandMiddle13 + 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} + - name: LeftHandPinky1 + parentName: + position: {x: -0.06565995, y: -0.007825106, z: -0.032251246} + rotation: {x: -0.046427853, y: 0.07573964, z: 0.086157486, w: 0.99231297} + scale: {x: 1, y: 1, z: 1} + - name: LeftHandPinky2 + parentName: + position: {x: -0.030805448, y: -0.000030874573, z: -0.0014480775} + rotation: {x: 0.049293827, y: -0.021720815, z: 0.03294899, w: 0.9980044} + scale: {x: 1, y: 1, z: 1} + - name: LeftHandPinky3 + parentName: + position: {x: -0.023064027, y: -0.0000064025826, z: 0.000000018330093} + rotation: {x: 0.000016131904, y: -0.058952924, z: 0.03817136, w: 0.9975307} + scale: {x: 1, y: 1, z: 1} + - name: LeftHandPinky13 + 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} + - name: LeftHandRing1 + parentName: + position: {x: -0.07030211, y: -0.0037453093, z: -0.011411792} + rotation: {x: -0.013746345, y: 0.07464847, z: 0.08505904, w: 0.99348056} + scale: {x: 1, y: 1, z: 1} + - name: LeftHandRing2 + parentName: + position: {x: -0.043135457, y: -0.000020882308, z: -0.0022351784} + rotation: {x: 0.019321503, y: -0.025657631, z: 0.029047232, w: 0.99906194} + scale: {x: 1, y: 1, z: 1} + - name: LeftHandRing3 + parentName: + position: {x: -0.030835565, y: 7.6733495e-11, z: -0.000000016497417} + rotation: {x: 0.000000024680048, y: -0.017875768, z: 0.042180043, w: 0.9989502} + scale: {x: 1, y: 1, z: 1} + - name: LeftHandRing13 + 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} + - name: LeftHandThumb1 + parentName: + position: {x: -0.014231241, y: -0.012377825, z: 0.025531668} + rotation: {x: -0.18747139, y: -0.09526798, z: -0.18643619, w: 0.9596979} + scale: {x: 1, y: 1, z: 1} + - name: LeftHandThumb2 + parentName: + position: {x: -0.016374, y: -0.00529, z: 0.023491409} + rotation: {x: -0.026062373, y: 0.09668853, z: 0.0036070915, w: 0.9949669} + scale: {x: 1, y: 1, z: 1} + - name: LeftHandThumb3 + parentName: + position: {x: -0.02546, y: -0.00764, z: 0.020833} + rotation: {x: 0.005452732, y: 0.00044311385, z: 0.00682628, w: 0.99996173} + scale: {x: 1, y: 1, z: 1} + - name: LeftHandThumb13 + 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} + - name: Neck + 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} + - name: Head + 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} + - name: HeadTop_End + 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - name: RightShoulder + parentName: + position: {x: 0.038286015, y: 0.22162114, z: -0.017063085} + rotation: {x: 0.15645637, y: 0.98711497, z: 0.02892334, w: 0.016999954} + scale: {x: 1, y: 1, z: 1} + - name: RightArm + parentName: + position: {x: -0.100501455, y: -0.0000024995522, z: -0.000000051557407} + rotation: {x: 0.10577453, y: 0.95214, z: -0.2857039, w: -0.024788901} + scale: {x: 1, y: 1, z: 1} + - name: RightForeArm + parentName: + position: {x: 0.25342825, y: 0.006011353, z: -0.016704524} + rotation: {x: 0.0055303723, y: 0.025294788, z: -0.014007926, w: 0.9995666} + scale: {x: 1, y: 1, z: 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} + - name: RightHandIndex1 + parentName: + position: {x: 0.0747695, y: -0.0012430536, z: 0.034344498} + rotation: {x: -0.02700006, y: 0.13470407, z: -0.06016864, w: 0.9886889} + scale: {x: 1, y: 1, z: 1} + - name: RightHandIndex2 + parentName: + position: {x: 0.0370584, y: 0.00072612107, z: 0.014538894} + rotation: {x: -0.08035798, y: 0.02302343, z: 0.043748345, w: 0.9955394} + scale: {x: 1, y: 1, z: 1} + - name: RightHandIndex3 + parentName: + position: {x: 0.025225038, y: -0.0049664653, z: 0.011012146} + rotation: {x: 0.020533867, y: -0.07771567, z: -0.08208516, w: 0.99337846} + scale: {x: 1, y: 1, z: 1} + - name: LeftHandIndex17 + 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} + - name: RightHandMiddle1 + parentName: + position: {x: 0.075647645, y: 0.0047914027, z: 0.011853182} + rotation: {x: -0.013923804, y: 0.009042385, z: -0.046430167, w: 0.9987836} + scale: {x: 1, y: 1, z: 1} + - name: RightHandMiddle2 + parentName: + position: {x: 0.043809064, y: 0.00019418815, z: 0.006454936} + rotation: {x: -0.02143885, y: -0.044562466, z: 0.08641908, w: 0.9950308} + scale: {x: 1, y: 1, z: 1} + - name: RightHandMiddle3 + parentName: + position: {x: 0.03307247, y: -0.007547537, z: 0.0016898462} + rotation: {x: 0.0010897098, y: -0.008687793, z: -0.06012576, w: 0.99815243} + scale: {x: 1, y: 1, z: 1} + - name: LeftHandMiddle17 + 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} + - name: RightHandPinky1 + parentName: + position: {x: 0.06680334, y: -0.0019941088, z: -0.030756146} + rotation: {x: -0.05336935, y: -0.25500086, z: -0.01257467, w: 0.965385} + scale: {x: 1, y: 1, z: 1} + - name: RightHandPinky2 + parentName: + position: {x: 0.028530842, y: -0.001397143, z: -0.011623796} + rotation: {x: 0.033343237, y: 0.0010585558, z: -0.058674466, w: 0.99771965} + scale: {x: 1, y: 1, z: 1} + - name: RightHandPinky3 + parentName: + position: {x: 0.02142686, y: -0.00055350893, z: -0.008516608} + rotation: {x: -0.012683659, y: 0.059112564, z: -0.03575224, w: 0.9975303} + scale: {x: 1, y: 1, z: 1} + - name: LeftHandPinky17 + 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} + - name: RightHandRing1 + parentName: + position: {x: 0.070598476, y: 0.0024570965, z: -0.009821458} + rotation: {x: -0.014535781, y: -0.11799609, z: -0.02574484, w: 0.99257386} + scale: {x: 1, y: 1, z: 1} + - name: RightHandRing2 + parentName: + position: {x: 0.042887185, y: -0.0013753821, z: -0.004945858} + rotation: {x: 0.022079678, y: -0.021696135, z: 0.079611, w: 0.9963452} + scale: {x: 1, y: 1, z: 1} + - name: RightHandRing3 + parentName: + position: {x: 0.029500604, y: -0.0076929354, z: -0.004622256} + rotation: {x: -0.0018628112, y: 0.01811421, z: -0.042036954, w: 0.9989501} + scale: {x: 1, y: 1, z: 1} + - name: LeftHandRing17 + 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} + - name: RightHandThumb1 + parentName: + position: {x: 0.014684916, y: -0.011104942, z: 0.025858095} + rotation: {x: -0.18467675, y: 0.052388243, z: 0.19327354, w: 0.96218264} + scale: {x: 1, y: 1, z: 1} + - name: RightHandThumb2 + parentName: + position: {x: 0.016374, y: -0.00529, z: 0.02349136} + rotation: {x: -0.026062947, y: -0.09668788, z: -0.0036065034, w: 0.994967} + scale: {x: 1, y: 1, z: 1} + - name: RightHandThumb3 + parentName: + position: {x: 0.02546, y: -0.00764, z: 0.020833} + rotation: {x: 0.0054543326, y: -0.00044313804, z: -0.006828248, w: 0.9999618} + scale: {x: 1, y: 1, z: 1} + - name: LeftHandThumb17 + 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} + 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/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidJumpAndFall.fbx b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidJumpAndFall.fbx new file mode 100644 index 00000000..419e2d78 Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidJumpAndFall.fbx differ diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidJumpAndFall.fbx.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidJumpAndFall.fbx.meta new file mode 100644 index 00000000..e5674299 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidJumpAndFall.fbx.meta @@ -0,0 +1,2262 @@ +fileFormatVersion: 2 +guid: 51dd2e4c869794f75a0df7d54b210214 +labels: +- ObiCloth +- ObiRope +- ObiSoftbody +ModelImporter: + 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: + materialImportMode: 0 + materialName: 1 + materialSearch: 2 + materialLocation: 0 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: + - serializedVersion: 16 + name: HumanoidJumpForwardLeft + takeName: idle_jumpFwd_idle_tk01 + internalID: 0 + firstFrame: 350 + lastFrame: 352 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: + - path: + weight: 1 + - path: Geo_grp + weight: 0 + - path: Geo_grp/Lw_Teeth_Mesh + weight: 0 + - path: Geo_grp/Tounge_Mesh + weight: 0 + - path: Geo_grp/Unity_Body_Mesh + weight: 0 + - path: Geo_grp/Up_Teeth_Mesh + weight: 0 + - path: Reference + weight: 1 + - path: Reference/Hips + weight: 1 + - path: Reference/Hips/LeftUpLeg + weight: 1 + - path: Reference/Hips/LeftUpLeg/LeftLeg + weight: 1 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot + weight: 1 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot/LeftToes + weight: 1 + - path: Reference/Hips/RightUpLeg + weight: 1 + - path: Reference/Hips/RightUpLeg/RightLeg + weight: 1 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot + weight: 1 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot/RightToes + weight: 1 + - path: Reference/Hips/Spine + weight: 1 + - path: Reference/Hips/Spine/Chest + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2/LeftHandIndex3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2/LeftHandMiddle3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2/LeftHandPinky3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2/LeftHandRing3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2/LeftHandThumb3 + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/JawEND + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/LeftLipCorner + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/LeftLipLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/RightLipCorner + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/RightLipLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/TongueBack + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/TongueBack/TongueTip + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftCheek + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEye + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEye/Le_Eye_Mesh + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEyelidLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEyelidUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftInnerBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftIOuterBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftLipUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftNostril + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightCheek + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEye + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEye/Ri_Eye_Mesh + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEyelidLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEyelidUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightInnerBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightIOuterBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightLipUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightNostril + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2/RightHandIndex3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2/RightHandMiddle3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2/RightHandPinky3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2/RightHandRing3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2/RightHandThumb3 + 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 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 1 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: + - path: + weight: 1 + - path: Geo_grp + weight: 0 + - path: Geo_grp/Lw_Teeth_Mesh + weight: 0 + - path: Geo_grp/Tounge_Mesh + weight: 0 + - path: Geo_grp/Unity_Body_Mesh + weight: 0 + - path: Geo_grp/Up_Teeth_Mesh + weight: 0 + - path: Reference + weight: 1 + - path: Reference/Hips + weight: 1 + - path: Reference/Hips/LeftUpLeg + weight: 1 + - path: Reference/Hips/LeftUpLeg/LeftLeg + weight: 1 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot + weight: 1 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot/LeftToes + weight: 1 + - path: Reference/Hips/RightUpLeg + weight: 1 + - path: Reference/Hips/RightUpLeg/RightLeg + weight: 1 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot + weight: 1 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot/RightToes + weight: 1 + - path: Reference/Hips/Spine + weight: 1 + - path: Reference/Hips/Spine/Chest + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2/LeftHandIndex3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2/LeftHandMiddle3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2/LeftHandPinky3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2/LeftHandRing3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2/LeftHandThumb3 + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/JawEND + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/LeftLipCorner + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/LeftLipLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/RightLipCorner + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/RightLipLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/TongueBack + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/TongueBack/TongueTip + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftCheek + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEye + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEye/Le_Eye_Mesh + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEyelidLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEyelidUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftInnerBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftIOuterBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftLipUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftNostril + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightCheek + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEye + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEye/Ri_Eye_Mesh + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEyelidLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEyelidUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightInnerBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightIOuterBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightLipUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightNostril + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2/RightHandIndex3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2/RightHandMiddle3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2/RightHandPinky3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2/RightHandRing3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2/RightHandThumb3 + 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 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 1 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: + - path: + weight: 1 + - path: Geo_grp + weight: 0 + - path: Geo_grp/Lw_Teeth_Mesh + weight: 0 + - path: Geo_grp/Tounge_Mesh + weight: 0 + - path: Geo_grp/Unity_Body_Mesh + weight: 0 + - path: Geo_grp/Up_Teeth_Mesh + weight: 0 + - path: Reference + weight: 1 + - path: Reference/Hips + weight: 1 + - path: Reference/Hips/LeftUpLeg + weight: 1 + - path: Reference/Hips/LeftUpLeg/LeftLeg + weight: 1 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot + weight: 1 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot/LeftToes + weight: 1 + - path: Reference/Hips/RightUpLeg + weight: 1 + - path: Reference/Hips/RightUpLeg/RightLeg + weight: 1 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot + weight: 1 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot/RightToes + weight: 1 + - path: Reference/Hips/Spine + weight: 1 + - path: Reference/Hips/Spine/Chest + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2/LeftHandIndex3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2/LeftHandMiddle3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2/LeftHandPinky3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2/LeftHandRing3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2/LeftHandThumb3 + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/JawEND + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/LeftLipCorner + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/LeftLipLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/RightLipCorner + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/RightLipLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/TongueBack + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/TongueBack/TongueTip + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftCheek + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEye + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEye/Le_Eye_Mesh + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEyelidLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEyelidUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftInnerBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftIOuterBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftLipUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftNostril + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightCheek + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEye + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEye/Ri_Eye_Mesh + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEyelidLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEyelidUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightInnerBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightIOuterBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightLipUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightNostril + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2/RightHandIndex3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2/RightHandMiddle3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2/RightHandPinky3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2/RightHandRing3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2/RightHandThumb3 + 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 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: + - path: + weight: 1 + - path: Geo_grp + weight: 0 + - path: Geo_grp/Lw_Teeth_Mesh + weight: 0 + - path: Geo_grp/Tounge_Mesh + weight: 0 + - path: Geo_grp/Unity_Body_Mesh + weight: 0 + - path: Geo_grp/Up_Teeth_Mesh + weight: 0 + - path: Reference + weight: 1 + - path: Reference/Hips + weight: 1 + - path: Reference/Hips/LeftUpLeg + weight: 1 + - path: Reference/Hips/LeftUpLeg/LeftLeg + weight: 1 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot + weight: 1 + - path: Reference/Hips/LeftUpLeg/LeftLeg/LeftFoot/LeftToes + weight: 1 + - path: Reference/Hips/RightUpLeg + weight: 1 + - path: Reference/Hips/RightUpLeg/RightLeg + weight: 1 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot + weight: 1 + - path: Reference/Hips/RightUpLeg/RightLeg/RightFoot/RightToes + weight: 1 + - path: Reference/Hips/Spine + weight: 1 + - path: Reference/Hips/Spine/Chest + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2/LeftHandIndex3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2/LeftHandMiddle3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2/LeftHandPinky3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2/LeftHandRing3 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2 + weight: 1 + - path: Reference/Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2/LeftHandThumb3 + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/JawEND + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/LeftLipCorner + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/LeftLipLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/RightLipCorner + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/RightLipLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/TongueBack + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/Jaw/TongueBack/TongueTip + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftCheek + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEye + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEye/Le_Eye_Mesh + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEyelidLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftEyelidUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftInnerBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftIOuterBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftLipUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/LeftNostril + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightCheek + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEye + weight: 1 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEye/Ri_Eye_Mesh + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEyelidLower + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightEyelidUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightInnerBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightIOuterBrow + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightLipUpper + weight: 0 + - path: Reference/Hips/Spine/Chest/Neck/Head/RightNostril + weight: 0 + - path: Reference/Hips/Spine/Chest/RightShoulder + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2/RightHandIndex3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2/RightHandMiddle3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2/RightHandPinky3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2/RightHandRing3 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2 + weight: 1 + - path: Reference/Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2/RightHandThumb3 + weight: 1 + maskType: 0 + maskSource: {instanceID: 0} + 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 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: + - boneName: Hips + humanName: Hips + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftUpLeg + humanName: LeftUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightUpLeg + humanName: RightUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftLeg + humanName: LeftLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightLeg + humanName: RightLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFoot + humanName: LeftFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFoot + humanName: RightFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Spine + humanName: Spine + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Chest + humanName: Chest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Neck + humanName: Neck + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Head + humanName: Head + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftShoulder + humanName: LeftShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightShoulder + humanName: RightShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftArm + humanName: LeftUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightArm + humanName: RightUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftForeArm + humanName: LeftLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightForeArm + humanName: RightLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHand + humanName: LeftHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHand + humanName: RightHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftToes + humanName: LeftToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightToes + humanName: RightToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftEye + humanName: LeftEye + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightEye + humanName: RightEye + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Jaw + humanName: Jaw + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb1 + humanName: Left Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb2 + humanName: Left Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb3 + humanName: Left Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex1 + humanName: Left Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex2 + humanName: Left Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex3 + humanName: Left Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle1 + humanName: Left Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle2 + humanName: Left Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle3 + humanName: Left Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing1 + humanName: Left Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing2 + humanName: Left Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing3 + humanName: Left Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky1 + humanName: Left Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky2 + humanName: Left Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky3 + humanName: Left Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb1 + humanName: Right Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb2 + humanName: Right Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb3 + humanName: Right Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex1 + humanName: Right Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex2 + humanName: Right Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex3 + humanName: Right Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle1 + humanName: Right Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle2 + humanName: Right Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle3 + humanName: Right Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing1 + humanName: Right Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing2 + humanName: Right Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing3 + humanName: Right Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky1 + humanName: Right Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky2 + humanName: Right Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky3 + humanName: Right Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + 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} + - name: Hips + 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} + - 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} + - name: LeftLeg + 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} + - name: LeftFoot + 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} + - 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} + - 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} + - name: RightLeg + 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} + - name: RightFoot + 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} + - 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} + - name: Spine + 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} + - name: Chest + 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} + - name: LeftShoulder + 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} + - name: LeftArm + 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} + - name: LeftForeArm + 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} + - name: LeftHand + 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} + - name: LeftHandIndex1 + 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} + - name: LeftHandIndex2 + 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} + - name: LeftHandIndex3 + 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} + - name: LeftHandMiddle1 + 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} + - name: LeftHandMiddle2 + 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} + - 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} + - name: LeftHandPinky1 + 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} + - name: LeftHandPinky2 + 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} + - 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} + - name: LeftHandRing1 + 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} + - name: LeftHandRing2 + 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} + - name: LeftHandRing3 + 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} + - name: LeftHandThumb1 + 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} + - name: LeftHandThumb2 + 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} + - 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} + - name: Neck + 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} + - name: Head + 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} + - name: Jaw + 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} + - name: JawEND + 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} + - 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} + - 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} + - 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} + - 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} + - name: TongueBack + 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} + - name: TongueTip + 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - name: RightShoulder + 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} + - name: RightArm + 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} + - name: RightForeArm + 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} + - name: RightHand + 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} + - name: RightHandIndex1 + 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} + - name: RightHandIndex2 + 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} + - 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} + - name: RightHandMiddle1 + 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} + - name: RightHandMiddle2 + 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} + - 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} + - name: RightHandPinky1 + 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} + - name: RightHandPinky2 + 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} + - 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} + - name: RightHandRing1 + 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} + - name: RightHandRing2 + 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} + - 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} + - name: RightHandThumb1 + 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} + - name: RightHandThumb2 + 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} + - 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} + 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/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidMidAir.fbx b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidMidAir.fbx new file mode 100644 index 00000000..80f6e240 Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidMidAir.fbx differ diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidMidAir.fbx.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidMidAir.fbx.meta new file mode 100644 index 00000000..15d8aea0 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidMidAir.fbx.meta @@ -0,0 +1,2641 @@ +fileFormatVersion: 2 +guid: f03e10c73f30b4ab4aa8ea8f1cc16d36 +labels: +- ObiCloth +- ObiRope +- ObiSoftbody +ModelImporter: + 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: + materialImportMode: 0 + materialName: 1 + materialSearch: 2 + materialLocation: 0 + animations: + legacyGenerateAnimations: 3 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 3 + 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 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 1 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 1 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 0 + heightFromFeet: 1 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: + - path: + 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 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 0 + heightFromFeet: 1 + mirror: 1 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: + - path: + weight: 1 + - path: Hips + weight: 1 + - path: Hips/Spine + weight: 1 + - path: Hips/Spine/Chest + weight: 1 + - path: Hips/Spine/Chest/Neck + weight: 1 + - path: Hips/Spine/Chest/Neck/Head + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/HeadTop_End + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/LeftEye + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/RightEye + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/Jaw + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/Jaw/TongueBack + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/Jaw/TongueTip + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/Jaw/LeftLipLower + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/Jaw/JawEND + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/Jaw/RightLipLower + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/Jaw/RightLipCorner + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/Jaw/LeftLipCorner + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/LeftLipUpper + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/LeftNostril + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/LeftCheek + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/LeftEyelidLower + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/LeftEyelidUpper + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/LeftInnerBrow + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/LeftIOuterBrow + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/RightInnerBrow + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/RightIOuterBrow + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/RightEyelidUpper + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/RightEyelidLower + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/RightCheek + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/RightNostril + weight: 1 + - path: Hips/Spine/Chest/Neck/Head/RightLipUpper + weight: 1 + - path: Hips/Spine/Chest/RightShoulder + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1 + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2 + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2/RightHandPinky3 + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandPinky1/RightHandPinky2/RightHandPinky3/LeftHandPinky17 + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1 + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2 + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2/RightHandRing3 + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandRing1/RightHandRing2/RightHandRing3/LeftHandRing17 + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1 + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2 + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2/RightHandMiddle3 + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandMiddle1/RightHandMiddle2/RightHandMiddle3/LeftHandMiddle17 + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1 + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2 + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2/RightHandIndex3 + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandIndex1/RightHandIndex2/RightHandIndex3/LeftHandIndex17 + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1 + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2 + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2/RightHandThumb3 + weight: 1 + - path: Hips/Spine/Chest/RightShoulder/RightArm/RightForeArm/RightHand/RightHandThumb1/RightHandThumb2/RightHandThumb3/LeftHandThumb17 + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1 + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2 + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2/LeftHandPinky3 + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandPinky1/LeftHandPinky2/LeftHandPinky3/LeftHandPinky13 + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1 + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2 + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2/LeftHandRing3 + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandRing1/LeftHandRing2/LeftHandRing3/LeftHandRing13 + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1 + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2 + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2/LeftHandMiddle3 + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandMiddle1/LeftHandMiddle2/LeftHandMiddle3/LeftHandMiddle13 + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1 + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2 + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2/LeftHandIndex3 + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandIndex1/LeftHandIndex2/LeftHandIndex3/LeftHandIndex13 + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1 + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2 + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2/LeftHandThumb3 + weight: 1 + - path: Hips/Spine/Chest/LeftShoulder/LeftArm/LeftForeArm/LeftHand/LeftHandThumb1/LeftHandThumb2/LeftHandThumb3/LeftHandThumb13 + weight: 1 + - path: Hips/RightUpLeg + weight: 1 + - path: Hips/RightUpLeg/RightLeg + weight: 1 + - path: Hips/RightUpLeg/RightLeg/RightFoot + weight: 1 + - path: Hips/RightUpLeg/RightLeg/RightFoot/RightToes + weight: 1 + - path: Hips/RightUpLeg/RightLeg/RightFoot/RightToes/LToeBase_End3 + weight: 1 + - path: Hips/LeftUpLeg + weight: 1 + - path: Hips/LeftUpLeg/LeftLeg + weight: 1 + - path: Hips/LeftUpLeg/LeftLeg/LeftFoot + weight: 1 + - path: Hips/LeftUpLeg/LeftLeg/LeftFoot/LeftToes + weight: 1 + - path: Hips/LeftUpLeg/LeftLeg/LeftFoot/LeftToes/LToeBase_End2 + weight: 1 + maskType: 0 + maskSource: {instanceID: 0} + 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 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: + - boneName: Hips + humanName: Hips + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightUpLeg + humanName: RightUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightLeg + humanName: RightLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFoot + humanName: RightFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightToes + humanName: RightToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Spine + humanName: Spine + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Chest + humanName: Chest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightShoulder + humanName: RightShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightArm + humanName: RightUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightForeArm + humanName: RightLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHand + humanName: RightHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Neck + humanName: Neck + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Head + humanName: Head + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Jaw + humanName: Jaw + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightEye + humanName: RightEye + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftEye + humanName: LeftEye + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftShoulder + humanName: LeftShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftArm + humanName: LeftUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftForeArm + humanName: LeftLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHand + humanName: LeftHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftUpLeg + humanName: LeftUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftLeg + humanName: LeftLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFoot + humanName: LeftFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftToes + humanName: LeftToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb1 + humanName: Left Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb2 + humanName: Left Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb3 + humanName: Left Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex1 + humanName: Left Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex2 + humanName: Left Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex3 + humanName: Left Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle1 + humanName: Left Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle2 + humanName: Left Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle3 + humanName: Left Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing1 + humanName: Left Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing2 + humanName: Left Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing3 + humanName: Left Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky1 + humanName: Left Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky2 + humanName: Left Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky3 + humanName: Left Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb1 + humanName: Right Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb2 + humanName: Right Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb3 + humanName: Right Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex1 + humanName: Right Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex2 + humanName: Right Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex3 + humanName: Right Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle1 + humanName: Right Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle2 + humanName: Right Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle3 + humanName: Right Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing1 + humanName: Right Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing2 + humanName: Right Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing3 + humanName: Right Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky1 + humanName: Right Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky2 + humanName: Right Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky3 + humanName: Right Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + 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} + - name: Hips + 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} + - name: LeftUpLeg + 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} + - 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} + - 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} + - 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} + - name: LToeBase_End2 + 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} + - name: RightUpLeg + 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} + - 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} + - 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} + - 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} + - name: LToeBase_End3 + 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} + - name: Spine + 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} + - 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} + - name: LeftShoulder + 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} + - name: LeftArm + 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} + - name: LeftForeArm + 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} + - name: LeftHand + 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} + - name: LeftHandIndex1 + 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} + - name: LeftHandIndex2 + 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} + - name: LeftHandIndex3 + 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} + - name: LeftHandIndex13 + 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} + - name: LeftHandMiddle1 + 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} + - name: LeftHandMiddle2 + 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} + - name: LeftHandMiddle3 + 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} + - name: LeftHandMiddle13 + 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} + - name: LeftHandPinky1 + 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} + - name: LeftHandPinky2 + 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} + - name: LeftHandPinky3 + 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} + - name: LeftHandPinky13 + 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} + - name: LeftHandRing1 + 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} + - name: LeftHandRing2 + 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} + - name: LeftHandRing3 + 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} + - name: LeftHandRing13 + 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} + - name: LeftHandThumb1 + 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} + - name: LeftHandThumb2 + 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} + - name: LeftHandThumb3 + 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} + - name: LeftHandThumb13 + 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} + - name: Neck + 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} + - name: Head + 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} + - name: HeadTop_End + 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - name: RightShoulder + 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} + - name: RightArm + 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} + - name: RightForeArm + 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} + - 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} + - name: RightHandIndex1 + 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} + - name: RightHandIndex2 + 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} + - name: RightHandIndex3 + 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} + - name: LeftHandIndex17 + 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} + - name: RightHandMiddle1 + 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} + - name: RightHandMiddle2 + 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} + - name: RightHandMiddle3 + 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} + - name: LeftHandMiddle17 + 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} + - name: RightHandPinky1 + 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} + - name: RightHandPinky2 + 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} + - name: RightHandPinky3 + 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} + - name: LeftHandPinky17 + 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} + - name: RightHandRing1 + 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} + - name: RightHandRing2 + 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} + - name: RightHandRing3 + 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} + - name: LeftHandRing17 + 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} + - name: RightHandThumb1 + 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} + - name: RightHandThumb2 + 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} + - name: RightHandThumb3 + 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} + - name: LeftHandThumb17 + 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} + 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/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRun.fbx b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRun.fbx new file mode 100644 index 00000000..72673a5b Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRun.fbx differ diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRun.fbx.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRun.fbx.meta new file mode 100644 index 00000000..301b3af2 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRun.fbx.meta @@ -0,0 +1,2814 @@ +fileFormatVersion: 2 +guid: 1cb8ed3cbba15f0479fbae54e0a963df +labels: +- ObiCloth +- ObiRope +- ObiSoftbody +ModelImporter: + 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: + materialImportMode: 0 + materialName: 1 + materialSearch: 2 + materialLocation: 0 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + 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: -0.0975 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 1 + loopBlendPositionY: 1 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 0 + heightFromFeet: 1 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 0 + maskSource: {instanceID: 0} + 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 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: + - boneName: Hips + humanName: Hips + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftUpLeg + humanName: LeftUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightUpLeg + humanName: RightUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftLeg + humanName: LeftLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightLeg + humanName: RightLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFoot + humanName: LeftFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFoot + humanName: RightFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Spine + humanName: Spine + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Chest + humanName: Chest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Neck + humanName: Neck + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Head + humanName: Head + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftShoulder + humanName: LeftShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightShoulder + humanName: RightShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftArm + humanName: LeftUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightArm + humanName: RightUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftForeArm + humanName: LeftLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightForeArm + humanName: RightLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHand + humanName: LeftHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHand + humanName: RightHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftToes + humanName: LeftToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightToes + humanName: RightToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftEye + humanName: LeftEye + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightEye + humanName: RightEye + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Jaw + humanName: Jaw + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb1 + humanName: Left Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb2 + humanName: Left Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb3 + humanName: Left Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex1 + humanName: Left Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex2 + humanName: Left Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex3 + humanName: Left Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle1 + humanName: Left Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle2 + humanName: Left Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle3 + humanName: Left Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing1 + humanName: Left Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing2 + humanName: Left Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing3 + humanName: Left Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky1 + humanName: Left Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky2 + humanName: Left Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky3 + humanName: Left Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb1 + humanName: Right Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb2 + humanName: Right Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb3 + humanName: Right Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex1 + humanName: Right Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex2 + humanName: Right Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex3 + humanName: Right Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle1 + humanName: Right Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle2 + humanName: Right Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle3 + humanName: Right Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing1 + humanName: Right Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing2 + humanName: Right Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing3 + humanName: Right Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky1 + humanName: Right Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky2 + humanName: Right Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky3 + humanName: Right Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + 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/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurn.fbx b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurn.fbx new file mode 100644 index 00000000..d115096f Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurn.fbx differ diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurn.fbx.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurn.fbx.meta new file mode 100644 index 00000000..1bba047a --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurn.fbx.meta @@ -0,0 +1,2467 @@ +fileFormatVersion: 2 +guid: 1062212255550964e974f3ffb3cbaae3 +labels: +- ObiCloth +- ObiRope +- ObiSoftbody +ModelImporter: + 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: + materialImportMode: 0 + materialName: 1 + materialSearch: 2 + materialLocation: 0 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + 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: HumanoidRunRight + takeName: _30_a_U1_M_P_RunForwardTurnRight_NtrlWide__Fb_Dia3m_No_0_PJ_4 + internalID: 0 + firstFrame: 98.5 + lastFrame: 115.7 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 1 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 0 + heightFromFeet: 1 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + 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.7 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0.5 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 1 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 0 + heightFromFeet: 1 + mirror: 1 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 0 + maskSource: {instanceID: 0} + 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 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: + - boneName: Hips + humanName: Hips + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftUpLeg + humanName: LeftUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightUpLeg + humanName: RightUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftLeg + humanName: LeftLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightLeg + humanName: RightLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFoot + humanName: LeftFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFoot + humanName: RightFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Spine + humanName: Spine + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Chest + humanName: Chest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Neck + humanName: Neck + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Head + humanName: Head + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftShoulder + humanName: LeftShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightShoulder + humanName: RightShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftArm + humanName: LeftUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightArm + humanName: RightUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftForeArm + humanName: LeftLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightForeArm + humanName: RightLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHand + humanName: LeftHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHand + humanName: RightHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftToes + humanName: LeftToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightToes + humanName: RightToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftEye + humanName: LeftEye + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightEye + humanName: RightEye + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Jaw + humanName: Jaw + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb1 + humanName: Left Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb2 + humanName: Left Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb3 + humanName: Left Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex1 + humanName: Left Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex2 + humanName: Left Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex3 + humanName: Left Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle1 + humanName: Left Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle2 + humanName: Left Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle3 + humanName: Left Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing1 + humanName: Left Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing2 + humanName: Left Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing3 + humanName: Left Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky1 + humanName: Left Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky2 + humanName: Left Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky3 + humanName: Left Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb1 + humanName: Right Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb2 + humanName: Right Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb3 + humanName: Right Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex1 + humanName: Right Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex2 + humanName: Right Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex3 + humanName: Right Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle1 + humanName: Right Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle2 + humanName: Right Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle3 + humanName: Right Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing1 + humanName: Right Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing2 + humanName: Right Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing3 + humanName: Right Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky1 + humanName: Right Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky2 + humanName: Right Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky3 + humanName: Right Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + 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} + - name: Hips + 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} + - name: LeftUpLeg + 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} + - 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} + - 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} + - 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} + - name: LToeBase_End2 + 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} + - 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} + - 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} + - 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} + - 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} + - name: LToeBase_End3 + 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} + - name: Spine + 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} + - name: Chest + 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} + - name: LeftShoulder + 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} + - name: LeftArm + 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} + - name: LeftForeArm + 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} + - name: LeftHand + 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} + - name: LeftHandIndex1 + 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} + - name: LeftHandIndex2 + 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} + - name: LeftHandIndex3 + 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} + - name: LeftHandIndex13 + 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} + - name: LeftHandMiddle1 + 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} + - name: LeftHandMiddle2 + 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} + - name: LeftHandMiddle3 + 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} + - name: LeftHandMiddle13 + 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} + - name: LeftHandPinky1 + 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} + - name: LeftHandPinky2 + 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} + - name: LeftHandPinky3 + 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} + - name: LeftHandPinky13 + 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} + - name: LeftHandRing1 + 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} + - name: LeftHandRing2 + 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} + - name: LeftHandRing3 + 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} + - name: LeftHandRing13 + 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} + - name: LeftHandThumb1 + 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} + - name: LeftHandThumb2 + 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} + - name: LeftHandThumb3 + 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} + - name: LeftHandThumb13 + 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} + - name: Neck + 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} + - name: Head + 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} + - name: HeadTop_End + 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - name: RightShoulder + 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} + - name: RightArm + 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} + - name: RightForeArm + 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} + - 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} + - name: RightHandIndex1 + 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} + - name: RightHandIndex2 + 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} + - name: RightHandIndex3 + 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} + - name: LeftHandIndex17 + 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} + - name: RightHandMiddle1 + 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} + - name: RightHandMiddle2 + 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} + - name: RightHandMiddle3 + 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} + - name: LeftHandMiddle17 + 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} + - name: RightHandPinky1 + 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} + - name: RightHandPinky2 + 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} + - name: RightHandPinky3 + 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} + - name: LeftHandPinky17 + 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} + - name: RightHandRing1 + 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} + - name: RightHandRing2 + 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} + - name: RightHandRing3 + 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} + - name: LeftHandRing17 + 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} + - name: RightHandThumb1 + 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} + - name: RightHandThumb2 + 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} + - name: RightHandThumb3 + 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} + - name: LeftHandThumb17 + 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} + 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/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurnSharp.fbx b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurnSharp.fbx new file mode 100644 index 00000000..943fd1bc Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurnSharp.fbx differ diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurnSharp.fbx.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurnSharp.fbx.meta new file mode 100644 index 00000000..38843bb5 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurnSharp.fbx.meta @@ -0,0 +1,2402 @@ +fileFormatVersion: 2 +guid: f2bed5dc5afacff44a00de8daae9703b +labels: +- ObiCloth +- ObiRope +- ObiSoftbody +ModelImporter: + 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: + materialImportMode: 0 + materialName: 1 + materialSearch: 2 + materialLocation: 0 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + 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: HumanoidRunRightSharp + takeName: _31_a_U1_M_P_RunForwardTurnRight_NtrlMedium__Fb_Dia2m_No_0_PJ_4 + 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 + loopBlendPositionY: 1 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 0 + heightFromFeet: 1 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + 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 + internalID: 0 + firstFrame: 76.4 + lastFrame: 91.6 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0.5 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 1 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 0 + heightFromFeet: 1 + mirror: 1 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 0 + maskSource: {instanceID: 0} + 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 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: + - boneName: Hips + humanName: Hips + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftUpLeg + humanName: LeftUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightUpLeg + humanName: RightUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftLeg + humanName: LeftLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightLeg + humanName: RightLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFoot + humanName: LeftFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFoot + humanName: RightFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Spine + humanName: Spine + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Chest + humanName: Chest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Neck + humanName: Neck + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Head + humanName: Head + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftShoulder + humanName: LeftShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightShoulder + humanName: RightShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftArm + humanName: LeftUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightArm + humanName: RightUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftForeArm + humanName: LeftLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightForeArm + humanName: RightLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHand + humanName: LeftHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHand + humanName: RightHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftToes + humanName: LeftToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightToes + humanName: RightToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftEye + humanName: LeftEye + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightEye + humanName: RightEye + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Jaw + humanName: Jaw + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb1 + humanName: Left Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb2 + humanName: Left Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb3 + humanName: Left Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex1 + humanName: Left Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex2 + humanName: Left Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex3 + humanName: Left Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle1 + humanName: Left Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle2 + humanName: Left Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle3 + humanName: Left Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing1 + humanName: Left Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing2 + humanName: Left Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing3 + humanName: Left Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky1 + humanName: Left Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky2 + humanName: Left Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky3 + humanName: Left Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb1 + humanName: Right Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb2 + humanName: Right Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb3 + humanName: Right Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex1 + humanName: Right Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex2 + humanName: Right Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex3 + humanName: Right Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle1 + humanName: Right Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle2 + humanName: Right Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle3 + humanName: Right Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing1 + humanName: Right Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing2 + humanName: Right Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing3 + humanName: Right Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky1 + humanName: Right Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky2 + humanName: Right Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky3 + humanName: Right Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + 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} + - name: Hips + 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} + - name: LeftUpLeg + 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} + - 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} + - 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} + - 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} + - name: RightUpLeg + 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} + - 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} + - 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} + - 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} + - name: Spine + 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} + - name: Chest + 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} + - name: LeftShoulder + 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} + - name: LeftArm + 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} + - name: LeftForeArm + 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} + - name: LeftHand + 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} + - name: LeftHandIndex1 + 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} + - name: LeftHandIndex2 + 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} + - name: LeftHandIndex3 + 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} + - name: LeftHandMiddle1 + 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} + - name: LeftHandMiddle2 + 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} + - name: LeftHandMiddle3 + 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} + - name: LeftHandPinky1 + 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} + - name: LeftHandPinky2 + 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} + - name: LeftHandPinky3 + 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} + - name: LeftHandRing1 + 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} + - name: LeftHandRing2 + 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} + - name: LeftHandRing3 + 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} + - name: LeftHandThumb1 + 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} + - name: LeftHandThumb2 + 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} + - 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} + - 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} + - name: Head + 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - name: RightShoulder + 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} + - name: RightArm + 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} + - name: RightForeArm + 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} + - 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} + - name: RightHandIndex1 + 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} + - name: RightHandIndex2 + 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} + - 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} + - name: RightHandMiddle1 + 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} + - name: RightHandMiddle2 + 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} + - 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} + - name: RightHandPinky1 + 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} + - name: RightHandPinky2 + 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} + - 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} + - name: RightHandRing1 + 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} + - name: RightHandRing2 + 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} + - 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} + - name: RightHandThumb1 + 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} + - name: RightHandThumb2 + 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} + - 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} + 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/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidStandTurn.fbx b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidStandTurn.fbx new file mode 100644 index 00000000..ec67bcdd Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidStandTurn.fbx differ diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidStandTurn.fbx.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidStandTurn.fbx.meta new file mode 100644 index 00000000..06779db0 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidStandTurn.fbx.meta @@ -0,0 +1,2922 @@ +fileFormatVersion: 2 +guid: 6fb3851da6a6f5948ab6892bee8ba920 +labels: +- ObiCloth +- ObiRope +- ObiSoftbody +ModelImporter: + 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: + materialImportMode: 0 + materialName: 1 + materialSearch: 2 + materialLocation: 0 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + 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: 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 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 1 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 0 + heightFromFeet: 1 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + 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 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 1 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 0 + heightFromFeet: 1 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + 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 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 1 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 0 + heightFromFeet: 1 + mirror: 1 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + 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 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 1 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 0 + heightFromFeet: 1 + mirror: 1 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 0 + maskSource: {instanceID: 0} + 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 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: + - boneName: Hips + humanName: Hips + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftUpLeg + humanName: LeftUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightUpLeg + humanName: RightUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftLeg + humanName: LeftLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightLeg + humanName: RightLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFoot + humanName: LeftFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFoot + humanName: RightFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Spine + humanName: Spine + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Chest + humanName: Chest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Neck + humanName: Neck + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Head + humanName: Head + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftShoulder + humanName: LeftShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightShoulder + humanName: RightShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftArm + humanName: LeftUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightArm + humanName: RightUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftForeArm + humanName: LeftLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightForeArm + humanName: RightLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHand + humanName: LeftHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHand + humanName: RightHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftToes + humanName: LeftToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightToes + humanName: RightToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftEye + humanName: LeftEye + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightEye + humanName: RightEye + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Jaw + humanName: Jaw + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb1 + humanName: Left Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb2 + humanName: Left Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb3 + humanName: Left Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex1 + humanName: Left Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex2 + humanName: Left Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex3 + humanName: Left Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle1 + humanName: Left Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle2 + humanName: Left Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle3 + humanName: Left Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing1 + humanName: Left Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing2 + humanName: Left Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing3 + humanName: Left Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky1 + humanName: Left Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky2 + humanName: Left Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky3 + humanName: Left Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb1 + humanName: Right Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb2 + humanName: Right Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb3 + humanName: Right Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex1 + humanName: Right Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex2 + humanName: Right Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex3 + humanName: Right Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle1 + humanName: Right Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle2 + humanName: Right Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle3 + humanName: Right Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing1 + humanName: Right Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing2 + humanName: Right Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing3 + humanName: Right Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky1 + humanName: Right Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky2 + humanName: Right Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky3 + humanName: Right Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + 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} + - name: Hips + 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - name: LeftShoulder + 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} + - name: LeftArm + 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} + - name: LeftForeArm + 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} + - 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} + - name: LeftHandIndex1 + 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} + - name: LeftHandIndex2 + 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} + - 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} + - name: LeftHandMiddle1 + 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} + - name: LeftHandMiddle2 + 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} + - 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} + - name: LeftHandPinky1 + 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} + - name: LeftHandPinky2 + 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} + - 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} + - name: LeftHandRing1 + 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} + - name: LeftHandRing2 + 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} + - 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} + - name: LeftHandThumb1 + 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} + - name: LeftHandThumb2 + 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - name: RightShoulder + 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} + - name: RightArm + 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} + - name: RightForeArm + 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} + - 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} + - name: RightHandIndex1 + 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} + - name: RightHandIndex2 + 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} + - 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} + - name: RightHandMiddle1 + 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} + - name: RightHandMiddle2 + 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} + - 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} + - name: RightHandPinky1 + 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} + - name: RightHandPinky2 + 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} + - 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} + - name: RightHandRing1 + 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} + - name: RightHandRing2 + 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} + - 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} + - name: RightHandThumb1 + 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} + - name: RightHandThumb2 + 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} + - 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} + 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/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalk.fbx b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalk.fbx new file mode 100644 index 00000000..7f7a2c5b Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalk.fbx differ diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalk.fbx.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalk.fbx.meta new file mode 100644 index 00000000..9a171ad5 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalk.fbx.meta @@ -0,0 +1,2358 @@ +fileFormatVersion: 2 +guid: b1a5e04ae51004842aba06704a6c2903 +labels: +- ObiCloth +- ObiRope +- ObiSoftbody +ModelImporter: + 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: + materialImportMode: 0 + materialName: 1 + materialSearch: 2 + materialLocation: 0 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + 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: 3.3 + level: 0 + cycleOffset: -0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 1 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 0 + heightFromFeet: 1 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 0 + maskSource: {instanceID: 0} + 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 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: + - boneName: Hips + humanName: Hips + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftUpLeg + humanName: LeftUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightUpLeg + humanName: RightUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftLeg + humanName: LeftLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightLeg + humanName: RightLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFoot + humanName: LeftFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFoot + humanName: RightFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Spine + humanName: Spine + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Chest + humanName: Chest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Neck + humanName: Neck + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Head + humanName: Head + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftShoulder + humanName: LeftShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightShoulder + humanName: RightShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftArm + humanName: LeftUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightArm + humanName: RightUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftForeArm + humanName: LeftLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightForeArm + humanName: RightLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHand + humanName: LeftHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHand + humanName: RightHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftToes + humanName: LeftToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightToes + humanName: RightToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftEye + humanName: LeftEye + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightEye + humanName: RightEye + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Jaw + humanName: Jaw + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb1 + humanName: Left Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb2 + humanName: Left Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb3 + humanName: Left Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex1 + humanName: Left Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex2 + humanName: Left Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex3 + humanName: Left Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle1 + humanName: Left Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle2 + humanName: Left Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle3 + humanName: Left Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing1 + humanName: Left Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing2 + humanName: Left Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing3 + humanName: Left Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky1 + humanName: Left Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky2 + humanName: Left Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky3 + humanName: Left Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb1 + humanName: Right Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb2 + humanName: Right Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb3 + humanName: Right Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex1 + humanName: Right Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex2 + humanName: Right Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex3 + humanName: Right Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle1 + humanName: Right Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle2 + humanName: Right Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle3 + humanName: Right Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing1 + humanName: Right Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing2 + humanName: Right Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing3 + humanName: Right Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky1 + humanName: Right Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky2 + humanName: Right Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky3 + humanName: Right Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + 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/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurn.fbx b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurn.fbx new file mode 100644 index 00000000..1a84a3dd Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurn.fbx differ diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurn.fbx.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurn.fbx.meta new file mode 100644 index 00000000..e961c46d --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurn.fbx.meta @@ -0,0 +1,2390 @@ +fileFormatVersion: 2 +guid: 1c52c953c83c2254a9fa72d50250f028 +labels: +- ObiCloth +- ObiRope +- ObiSoftbody +ModelImporter: + 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: + materialImportMode: 0 + materialName: 1 + materialSearch: 2 + materialLocation: 0 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + 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: HumanoidWalkRight + takeName: _7_a_U1_M_P_WalkForwardTurnRight_NtrlMedium__Fb_Dia2m_No_0_PJ_1 + 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 + loopBlendPositionY: 1 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 0 + heightFromFeet: 1 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + 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 + internalID: 0 + firstFrame: 90.6 + lastFrame: 122.100006 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0.5 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 1 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 0 + heightFromFeet: 1 + mirror: 1 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 0 + maskSource: {instanceID: 0} + 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 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: + - boneName: Hips + humanName: Hips + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftUpLeg + humanName: LeftUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightUpLeg + humanName: RightUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftLeg + humanName: LeftLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightLeg + humanName: RightLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFoot + humanName: LeftFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFoot + humanName: RightFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Spine + humanName: Spine + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Chest + humanName: Chest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Neck + humanName: Neck + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Head + humanName: Head + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftShoulder + humanName: LeftShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightShoulder + humanName: RightShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftArm + humanName: LeftUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightArm + humanName: RightUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftForeArm + humanName: LeftLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightForeArm + humanName: RightLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHand + humanName: LeftHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHand + humanName: RightHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftToes + humanName: LeftToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightToes + humanName: RightToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftEye + humanName: LeftEye + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightEye + humanName: RightEye + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Jaw + humanName: Jaw + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb1 + humanName: Left Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb2 + humanName: Left Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb3 + humanName: Left Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex1 + humanName: Left Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex2 + humanName: Left Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex3 + humanName: Left Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle1 + humanName: Left Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle2 + humanName: Left Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle3 + humanName: Left Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing1 + humanName: Left Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing2 + humanName: Left Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing3 + humanName: Left Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky1 + humanName: Left Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky2 + humanName: Left Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky3 + humanName: Left Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb1 + humanName: Right Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb2 + humanName: Right Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb3 + humanName: Right Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex1 + humanName: Right Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex2 + humanName: Right Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex3 + humanName: Right Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle1 + humanName: Right Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle2 + humanName: Right Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle3 + humanName: Right Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing1 + humanName: Right Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing2 + humanName: Right Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing3 + humanName: Right Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky1 + humanName: Right Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky2 + humanName: Right Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky3 + humanName: Right Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + 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} + - name: Hips + 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} + - name: LeftUpLeg + 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} + - 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} + - 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} + - 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} + - name: RightUpLeg + 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} + - 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} + - 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} + - 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} + - name: Spine + 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} + - name: Chest + 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} + - name: LeftShoulder + 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} + - name: LeftArm + 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} + - name: LeftForeArm + 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} + - name: LeftHand + 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} + - name: LeftHandIndex1 + 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} + - name: LeftHandIndex2 + 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} + - name: LeftHandIndex3 + 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} + - name: LeftHandMiddle1 + 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} + - name: LeftHandMiddle2 + 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} + - name: LeftHandMiddle3 + 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} + - name: LeftHandPinky1 + 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} + - name: LeftHandPinky2 + 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} + - name: LeftHandPinky3 + 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} + - name: LeftHandRing1 + 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} + - name: LeftHandRing2 + 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} + - name: LeftHandRing3 + 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} + - name: LeftHandThumb1 + 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} + - name: LeftHandThumb2 + 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} + - 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} + - name: Neck + 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} + - name: Head + 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} + - 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} + - name: JawEND + 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - name: LeftIOuterBrow + 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} + - 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} + - 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} + - 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} + - name: RightEye + 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} + - 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} + - 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} + - 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} + - name: RightIOuterBrow + 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} + - 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} + - 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} + - name: RightShoulder + 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} + - name: RightArm + 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} + - name: RightForeArm + 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} + - 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} + - name: RightHandIndex1 + 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} + - name: RightHandIndex2 + 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} + - 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} + - name: RightHandMiddle1 + 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} + - name: RightHandMiddle2 + 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} + - 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} + - name: RightHandPinky1 + 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} + - name: RightHandPinky2 + 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} + - 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} + - name: RightHandRing1 + 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} + - name: RightHandRing2 + 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} + - 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} + - name: RightHandThumb1 + 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} + - name: RightHandThumb2 + 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} + - 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} + 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/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurnSharp.fbx b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurnSharp.fbx new file mode 100644 index 00000000..39425acd Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurnSharp.fbx differ diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurnSharp.fbx.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurnSharp.fbx.meta new file mode 100644 index 00000000..e677c292 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurnSharp.fbx.meta @@ -0,0 +1,2390 @@ +fileFormatVersion: 2 +guid: bb141fc9a700c9c4ca7e6dadb8acf24b +labels: +- ObiCloth +- ObiRope +- ObiSoftbody +ModelImporter: + 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: + materialImportMode: 0 + materialName: 1 + materialSearch: 2 + materialLocation: 0 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + 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: HumanoidWalkRightSharp + takeName: _8_a_U1_M_P_WalkForwardTurnRight_NtrlShort__Fb_Dia1m_No_0_PJ_4 + 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 + loopBlendPositionY: 1 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 0 + heightFromFeet: 1 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + 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 + internalID: 0 + firstFrame: 53.3 + lastFrame: 84 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0.5 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 1 + loopBlendOrientation: 0 + loopBlendPositionY: 1 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 0 + heightFromFeet: 1 + mirror: 1 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 0 + maskSource: {instanceID: 0} + 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 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 4 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: + - boneName: Hips + humanName: Hips + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftUpLeg + humanName: LeftUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightUpLeg + humanName: RightUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftLeg + humanName: LeftLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightLeg + humanName: RightLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftFoot + humanName: LeftFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightFoot + humanName: RightFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Spine + humanName: Spine + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Chest + humanName: Chest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Neck + humanName: Neck + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Head + humanName: Head + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftShoulder + humanName: LeftShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightShoulder + humanName: RightShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftArm + humanName: LeftUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightArm + humanName: RightUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftForeArm + humanName: LeftLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightForeArm + humanName: RightLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHand + humanName: LeftHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHand + humanName: RightHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftToes + humanName: LeftToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightToes + humanName: RightToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftEye + humanName: LeftEye + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightEye + humanName: RightEye + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Jaw + humanName: Jaw + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb1 + humanName: Left Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb2 + humanName: Left Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandThumb3 + humanName: Left Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex1 + humanName: Left Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex2 + humanName: Left Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandIndex3 + humanName: Left Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle1 + humanName: Left Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle2 + humanName: Left Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandMiddle3 + humanName: Left Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing1 + humanName: Left Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing2 + humanName: Left Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandRing3 + humanName: Left Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky1 + humanName: Left Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky2 + humanName: Left Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: LeftHandPinky3 + humanName: Left Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb1 + humanName: Right Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb2 + humanName: Right Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandThumb3 + humanName: Right Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex1 + humanName: Right Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex2 + humanName: Right Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandIndex3 + humanName: Right Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle1 + humanName: Right Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle2 + humanName: Right Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandMiddle3 + humanName: Right Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing1 + humanName: Right Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing2 + humanName: Right Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandRing3 + humanName: Right Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky1 + humanName: Right Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky2 + humanName: Right Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: RightHandPinky3 + humanName: Right Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + 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} + - name: Hips + 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} + - name: LeftUpLeg + 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - name: Spine + 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} + - name: Chest + 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} + - name: LeftShoulder + 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} + - name: LeftArm + 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} + - name: LeftForeArm + 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} + - name: LeftHand + 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} + - name: LeftHandIndex1 + 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} + - name: LeftHandIndex2 + 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} + - name: LeftHandIndex3 + 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} + - name: LeftHandMiddle1 + 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} + - name: LeftHandMiddle2 + 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} + - name: LeftHandMiddle3 + 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} + - name: LeftHandPinky1 + 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} + - name: LeftHandPinky2 + 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} + - name: LeftHandPinky3 + 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} + - name: LeftHandRing1 + 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} + - name: LeftHandRing2 + 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} + - name: LeftHandRing3 + 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} + - name: LeftHandThumb1 + 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} + - name: LeftHandThumb2 + 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} + - 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} + - name: Neck + 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} + - name: Head + 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - 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} + - name: RightShoulder + 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} + - name: RightArm + 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} + - name: RightForeArm + 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} + - 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} + - name: RightHandIndex1 + 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} + - name: RightHandIndex2 + 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} + - 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} + - name: RightHandMiddle1 + 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} + - name: RightHandMiddle2 + 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} + - 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} + - name: RightHandPinky1 + 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} + - name: RightHandPinky2 + 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} + - 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} + - name: RightHandRing1 + 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} + - name: RightHandRing2 + 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} + - 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} + - name: RightHandThumb1 + 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} + - name: RightHandThumb2 + 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} + - 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} + 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/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/ThirdPersonAnimatorController.controller b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/ThirdPersonAnimatorController.controller new file mode 100644 index 00000000..7bf86ec3 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/ThirdPersonAnimatorController.controller @@ -0,0 +1,937 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1107 &-4588598185670696939 +AnimatorStateMachine: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: New Layer + m_ChildStates: [] + 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: 0} +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ThirdPersonAnimatorController + serializedVersion: 5 + m_AnimatorParameters: + - m_Name: Forward + m_Type: 1 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + - m_Name: Turn + m_Type: 1 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + - m_Name: Crouch + m_Type: 4 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + - m_Name: OnGround + m_Type: 4 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 1 + m_Controller: {fileID: 9100000} + - m_Name: Jump + m_Type: 1 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + - m_Name: JumpLeg + m_Type: 1 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 110700000} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 1 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!206 &20600000 +BlendTree: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Blend Tree + m_Childs: + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: dffa50cfe77e0434bbfa71245b3dd529, type: 3} + m_Threshold: 0 + m_Position: {x: 0, y: 0} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: 6fb3851da6a6f5948ab6892bee8ba920, type: 3} + m_Threshold: 0.0952381 + m_Position: {x: 0.5, y: 0} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400006, guid: 6fb3851da6a6f5948ab6892bee8ba920, type: 3} + m_Threshold: 0.1904762 + m_Position: {x: 1, y: 0} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400010, guid: 6fb3851da6a6f5948ab6892bee8ba920, type: 3} + m_Threshold: 0.2857143 + m_Position: {x: -0.5, y: 0} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400014, guid: 6fb3851da6a6f5948ab6892bee8ba920, type: 3} + m_Threshold: 0.3809524 + m_Position: {x: -1, y: 0} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: b1a5e04ae51004842aba06704a6c2903, type: 3} + m_Threshold: 0.42857143 + m_Position: {x: 0, y: 0.5} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400002, guid: bb141fc9a700c9c4ca7e6dadb8acf24b, type: 3} + m_Threshold: 0.47619048 + m_Position: {x: 1, y: 0.5} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: 1c52c953c83c2254a9fa72d50250f028, type: 3} + m_Threshold: 0.52380955 + m_Position: {x: 0.5, y: 0.5} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: bb141fc9a700c9c4ca7e6dadb8acf24b, type: 3} + m_Threshold: 0.61904764 + m_Position: {x: -1, y: 0.5} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400002, guid: 1c52c953c83c2254a9fa72d50250f028, type: 3} + m_Threshold: 0.6666667 + m_Position: {x: -0.5, y: 0.5} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: 1cb8ed3cbba15f0479fbae54e0a963df, type: 3} + m_Threshold: 0.7619048 + m_Position: {x: 0, y: 1} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: f2bed5dc5afacff44a00de8daae9703b, type: 3} + m_Threshold: 0.8095238 + m_Position: {x: 1, y: 1} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400002, guid: f2bed5dc5afacff44a00de8daae9703b, type: 3} + m_Threshold: 0.85714287 + m_Position: {x: -1, y: 1} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: 1062212255550964e974f3ffb3cbaae3, type: 3} + m_Threshold: 0.9047619 + m_Position: {x: 0.5, y: 1} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400002, guid: 1062212255550964e974f3ffb3cbaae3, type: 3} + m_Threshold: 0.95238096 + m_Position: {x: -0.5, y: 1} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + m_BlendParameter: Turn + m_BlendParameterY: Forward + m_MinThreshold: 0 + m_MaxThreshold: 0.95238096 + m_UseAutomaticThresholds: 0 + m_NormalizedBlendValues: 0 + m_BlendType: 3 +--- !u!206 &20600002 +BlendTree: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Idle + m_Childs: + - serializedVersion: 2 + m_Motion: {fileID: 7400010, guid: 4ee731d726c3dd34eb36806ea0d8fe98, type: 3} + m_Threshold: -1 + m_Position: {x: 0, y: 0} + m_TimeScale: 2 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400014, guid: e38eb300eb4745b4db509a224a99bbe1, type: 3} + m_Threshold: 0 + m_Position: {x: 0, y: 0} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: 4ee731d726c3dd34eb36806ea0d8fe98, type: 3} + m_Threshold: 1 + m_Position: {x: 0, y: 0} + m_TimeScale: 2 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + m_BlendParameter: Turn + m_BlendParameterY: Blend + m_MinThreshold: -1 + m_MaxThreshold: 1 + m_UseAutomaticThresholds: 0 + m_NormalizedBlendValues: 0 + m_BlendType: 0 +--- !u!206 &20600004 +BlendTree: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Walk + m_Childs: + - serializedVersion: 2 + m_Motion: {fileID: 7400002, guid: 6da89662649b53c49b06616f51157b48, type: 3} + m_Threshold: -1 + m_Position: {x: 0, y: 0} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: 24c848a6dbf95e848950ca5403a1191e, type: 3} + m_Threshold: 0 + m_Position: {x: 0, y: 0} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: 6da89662649b53c49b06616f51157b48, type: 3} + m_Threshold: 1 + m_Position: {x: 0, y: 0} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + m_BlendParameter: Turn + m_BlendParameterY: Blend + m_MinThreshold: -1 + m_MaxThreshold: 1 + m_UseAutomaticThresholds: 0 + m_NormalizedBlendValues: 0 + m_BlendType: 0 +--- !u!206 &20600006 +BlendTree: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Run + m_Childs: + - serializedVersion: 2 + m_Motion: {fileID: 7400026, guid: ccb909e390d7be24e9107d33119a0eaa, type: 3} + m_Threshold: -1 + m_Position: {x: 0, y: 0} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400024, guid: ccb909e390d7be24e9107d33119a0eaa, type: 3} + m_Threshold: 0 + m_Position: {x: 0, y: 0} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400022, guid: ccb909e390d7be24e9107d33119a0eaa, type: 3} + m_Threshold: 1 + m_Position: {x: 0, y: 0} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + m_BlendParameter: Turn + m_BlendParameterY: Blend + m_MinThreshold: -1 + m_MaxThreshold: 1 + m_UseAutomaticThresholds: 0 + m_NormalizedBlendValues: 0 + m_BlendType: 0 +--- !u!206 &20608386 +BlendTree: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Idle + m_Childs: + - serializedVersion: 2 + m_Motion: {fileID: 7400002, guid: 98e8896e12d39bb41a5a74e9ae897a64, type: 3} + m_Threshold: -1 + m_Position: {x: 0, y: 0} + m_TimeScale: 2 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: 11cd8118786c19d49a6bf4fc939ad434, type: 3} + m_Threshold: 0 + m_Position: {x: 0, y: 0} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: 98e8896e12d39bb41a5a74e9ae897a64, type: 3} + m_Threshold: 1 + m_Position: {x: 0, y: 0} + m_TimeScale: 2 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + m_BlendParameter: Turn + m_BlendParameterY: Blend + m_MinThreshold: -1 + m_MaxThreshold: 1 + m_UseAutomaticThresholds: 0 + m_NormalizedBlendValues: 0 + m_BlendType: 0 +--- !u!206 &20610505 +BlendTree: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Blend Tree + m_Childs: + - serializedVersion: 2 + m_Motion: {fileID: 7400002, guid: d89ea37480b6d75458aa38843e9688dc, type: 3} + m_Threshold: 0 + m_Position: {x: 0, y: 0} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400004, guid: d89ea37480b6d75458aa38843e9688dc, type: 3} + m_Threshold: 0.1984127 + m_Position: {x: 0, y: 1} + m_TimeScale: 2 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400008, guid: d89ea37480b6d75458aa38843e9688dc, type: 3} + m_Threshold: 0.3968254 + m_Position: {x: -1, y: 1} + m_TimeScale: 2 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400014, guid: d89ea37480b6d75458aa38843e9688dc, type: 3} + m_Threshold: 0.5952381 + m_Position: {x: 1, y: 1} + m_TimeScale: 2 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + m_BlendParameter: Turn + m_BlendParameterY: Forward + m_MinThreshold: 0 + m_MaxThreshold: 0.5952381 + m_UseAutomaticThresholds: 1 + m_NormalizedBlendValues: 0 + m_BlendType: 3 +--- !u!206 &20610787 +BlendTree: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Blend Tree + m_Childs: + - serializedVersion: 2 + m_Motion: {fileID: 7400002, guid: f03e10c73f30b4ab4aa8ea8f1cc16d36, type: 3} + m_Threshold: 0 + m_Position: {x: 0, y: -1} + m_TimeScale: 0.1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400004, guid: 51dd2e4c869794f75a0df7d54b210214, type: 3} + m_Threshold: 5 + m_Position: {x: 5, y: -1} + m_TimeScale: 0.1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: 51dd2e4c869794f75a0df7d54b210214, type: 3} + m_Threshold: 15 + m_Position: {x: 5, y: 1} + m_TimeScale: 0.1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400004, guid: 0d9d26e2162aa4d11ab075b34c029673, type: 3} + m_Threshold: 20 + m_Position: {x: -5, y: 0} + m_TimeScale: 0.1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400004, guid: f03e10c73f30b4ab4aa8ea8f1cc16d36, type: 3} + m_Threshold: 25 + m_Position: {x: 0, y: 1} + m_TimeScale: 0.1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400006, guid: 0d9d26e2162aa4d11ab075b34c029673, type: 3} + m_Threshold: 35 + m_Position: {x: 5, y: 0} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400008, guid: 0d9d26e2162aa4d11ab075b34c029673, type: 3} + m_Threshold: 40 + m_Position: {x: 0, y: 0} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + m_BlendParameter: Jump + m_BlendParameterY: JumpLeg + m_MinThreshold: 0 + m_MaxThreshold: 40 + m_UseAutomaticThresholds: 0 + m_NormalizedBlendValues: 0 + m_BlendType: 3 +--- !u!206 &20621344 +BlendTree: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Blend Tree + m_Childs: + - serializedVersion: 2 + m_Motion: {fileID: 7400002, guid: f03e10c73f30b4ab4aa8ea8f1cc16d36, type: 3} + m_Threshold: 0 + m_Position: {x: 0, y: -1} + m_TimeScale: 0.1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400004, guid: 51dd2e4c869794f75a0df7d54b210214, type: 3} + m_Threshold: 5 + m_Position: {x: 5, y: -1} + m_TimeScale: 0.1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: 51dd2e4c869794f75a0df7d54b210214, type: 3} + m_Threshold: 15 + m_Position: {x: 5, y: 1} + m_TimeScale: 0.1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400004, guid: 0d9d26e2162aa4d11ab075b34c029673, type: 3} + m_Threshold: 20 + m_Position: {x: -9, y: 0} + m_TimeScale: 0.1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400004, guid: f03e10c73f30b4ab4aa8ea8f1cc16d36, type: 3} + m_Threshold: 25 + m_Position: {x: 0, y: 1} + m_TimeScale: 0.1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400006, guid: 0d9d26e2162aa4d11ab075b34c029673, type: 3} + m_Threshold: 35 + m_Position: {x: 5, y: 0} + m_TimeScale: 0.1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400008, guid: 0d9d26e2162aa4d11ab075b34c029673, type: 3} + m_Threshold: 40 + m_Position: {x: 0, y: 0} + m_TimeScale: 0.1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + m_BlendParameter: Jump + m_BlendParameterY: JumpLeg + m_MinThreshold: 0 + m_MaxThreshold: 40 + m_UseAutomaticThresholds: 0 + m_NormalizedBlendValues: 0 + m_BlendType: 3 +--- !u!206 &20631403 +BlendTree: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Walk + m_Childs: + - serializedVersion: 2 + m_Motion: {fileID: 7400002, guid: 1da5f9c54c49bfc488819dd2df8bb228, type: 3} + m_Threshold: -1 + m_Position: {x: 0, y: 0} + m_TimeScale: 2 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: c869773dc0bdfe042a8293344c186eaf, type: 3} + m_Threshold: 0 + m_Position: {x: 0, y: 0} + m_TimeScale: 2 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 7400000, guid: 1da5f9c54c49bfc488819dd2df8bb228, type: 3} + m_Threshold: 1 + m_Position: {x: 0, y: 0} + m_TimeScale: 2 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + m_BlendParameter: Turn + m_BlendParameterY: Blend + m_MinThreshold: -1 + m_MaxThreshold: 1 + m_UseAutomaticThresholds: 0 + m_NormalizedBlendValues: 0 + m_BlendType: 0 +--- !u!206 &20659883 +BlendTree: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Blend Tree + m_Childs: + - serializedVersion: 2 + m_Motion: {fileID: 20608386} + m_Threshold: 0 + m_Position: {x: 0, y: 0} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + - serializedVersion: 2 + m_Motion: {fileID: 20631403} + m_Threshold: 1 + m_Position: {x: 0, y: 0} + m_TimeScale: 1 + m_CycleOffset: 0 + m_DirectBlendParameter: + m_Mirror: 0 + m_BlendParameter: Forward + m_BlendParameterY: Blend + m_MinThreshold: 0 + m_MaxThreshold: 1 + m_UseAutomaticThresholds: 1 + m_NormalizedBlendValues: 0 + m_BlendType: 0 +--- !u!206 &20683409 +BlendTree: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Blend Tree + m_Childs: [] + m_BlendParameter: Forward + m_BlendParameterY: Forward + m_MinThreshold: 0 + m_MaxThreshold: 1 + m_UseAutomaticThresholds: 1 + m_NormalizedBlendValues: 0 + m_BlendType: 0 +--- !u!1101 &110100000 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 1 + m_ConditionEvent: Crouch + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 110200000} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.080123246 + m_TransitionOffset: 0 + m_ExitTime: 0.9 + m_HasExitTime: 0 + m_HasFixedDuration: 0 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &110100036 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 2 + m_ConditionEvent: Crouch + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 110298501} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.111009784 + m_TransitionOffset: 0 + m_ExitTime: 0.9 + m_HasExitTime: 0 + m_HasFixedDuration: 0 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &110123257 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 1 + m_ConditionEvent: OnGround + m_EventTreshold: 0 + - m_ConditionMode: 3 + m_ConditionEvent: Jump + m_EventTreshold: -2 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 110298501} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.11774184 + m_TransitionOffset: 0 + m_ExitTime: 0.9 + m_HasExitTime: 0 + m_HasFixedDuration: 0 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &110135218 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 2 + m_ConditionEvent: OnGround + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 110276412} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.10203097 + m_TransitionOffset: 0.018051635 + m_ExitTime: 0.9 + m_HasExitTime: 0 + m_HasFixedDuration: 0 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &110161005 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 2 + m_ConditionEvent: OnGround + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 110276412} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.024659414 + m_TransitionOffset: 0 + m_ExitTime: 0.9 + m_HasExitTime: 0 + m_HasFixedDuration: 0 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &110167223 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 2 + m_ConditionEvent: Crouch + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 110298501} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.101033315 + m_TransitionOffset: 0 + m_ExitTime: 0.9 + m_HasExitTime: 0 + m_HasFixedDuration: 0 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &110172777 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 1 + m_ConditionEvent: OnGround + m_EventTreshold: 0 + - m_ConditionMode: 4 + m_ConditionEvent: Jump + m_EventTreshold: -2 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 110200000} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.18205842 + m_TransitionOffset: 0 + m_ExitTime: 0.9 + m_HasExitTime: 0 + m_HasFixedDuration: 0 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1102 &110200000 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Crouching + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 110100036} + - {fileID: 110161005} + m_StateMachineBehaviours: [] + m_Position: {x: 444, y: 240, z: 0} + m_IKOnFeet: 1 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 20610505} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1102 &110276412 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Airborne + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 110172777} + - {fileID: 110123257} + m_StateMachineBehaviours: [] + m_Position: {x: 444, y: -48, 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: 20621344} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1102 &110298501 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Grounded + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 110100000} + - {fileID: 110135218} + m_StateMachineBehaviours: [] + m_Position: {x: 588, y: 96, z: 0} + m_IKOnFeet: 1 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 20600000} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1107 &110700000 +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: 110298501} + m_Position: {x: 590, y: 100, z: 0} + - serializedVersion: 1 + m_State: {fileID: 110200000} + m_Position: {x: 440, y: 240, z: 0} + - serializedVersion: 1 + m_State: {fileID: 110276412} + m_Position: {x: 440, y: -50, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 250, y: 100, z: 0} + m_ExitPosition: {x: 792, y: 96, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 110298501} diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/ThirdPersonAnimatorController.controller.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/ThirdPersonAnimatorController.controller.meta new file mode 100644 index 00000000..34026eb9 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Animations/ThirdPersonAnimatorController.controller.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e2cf68ff4b1ffda45a77f7307dd789b9 +labels: +- ObiCloth +- ObiRope +- ObiSoftbody +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: -1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials.meta new file mode 100644 index 00000000..54788454 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bb188f7223e6b4a96972d88b44925c5e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/CharacterFriction.physicMaterial b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/CharacterFriction.physicMaterial new file mode 100644 index 00000000..2d99aa2a --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/CharacterFriction.physicMaterial @@ -0,0 +1,14 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!134 &13400000 +PhysicMaterial: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: CharacterFriction + dynamicFriction: 0.9 + staticFriction: 0.6 + bounciness: 0 + frictionCombine: 3 + bounceCombine: 3 diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/CharacterFriction.physicMaterial.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/CharacterFriction.physicMaterial.meta new file mode 100644 index 00000000..d68cc581 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/CharacterFriction.physicMaterial.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0d242f91ab1d749a8b6230e6da662881 +timeCreated: 1501142792 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 13400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighFriction.asset b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighFriction.asset new file mode 100644 index 00000000..ae997429 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighFriction.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: HighFriction + m_EditorClassIdentifier: + dynamicFriction: 0.5 + staticFriction: 0 + stickiness: 0 + stickDistance: 0 + frictionCombine: 3 + stickinessCombine: 3 + rollingContacts: 0 + rollingFriction: 0 diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighFriction.asset.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighFriction.asset.meta new file mode 100644 index 00000000..656b100b --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighFriction.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 56297c6e785b44eb28e469b62cedc016 +timeCreated: 1453427102 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighStaticFriction.asset b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighStaticFriction.asset new file mode 100644 index 00000000..ea897662 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighStaticFriction.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: HighStaticFriction + m_EditorClassIdentifier: + dynamicFriction: 0.3 + staticFriction: 0.5 + stickiness: 0 + stickDistance: 0 + frictionCombine: 1 + stickinessCombine: 3 + rollingContacts: 0 + rollingFriction: 0.002 diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighStaticFriction.asset.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighStaticFriction.asset.meta new file mode 100644 index 00000000..19d15df9 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighStaticFriction.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f7532232f07594be3a36470e25b47b4f +timeCreated: 1453427100 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/Ice.asset b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/Ice.asset new file mode 100644 index 00000000..5d97b71d --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/Ice.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: Ice + m_EditorClassIdentifier: + dynamicFriction: 0 + staticFriction: 0 + stickiness: 0 + stickDistance: 0 + frictionCombine: 0 + stickinessCombine: 0 + rollingContacts: 0 + rollingFriction: 0 diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/Ice.asset.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/Ice.asset.meta new file mode 100644 index 00000000..72bbb0b5 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/Ice.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7e318fd02475245f48f8f968e5ef09d5 +timeCreated: 1445311398 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/LowFriction.asset b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/LowFriction.asset new file mode 100644 index 00000000..aac508c5 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/LowFriction.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: LowFriction + m_EditorClassIdentifier: + dynamicFriction: 0.1 + staticFriction: 0 + stickiness: 0 + stickDistance: 0 + frictionCombine: 0 + stickinessCombine: 0 + rollingContacts: 0 + rollingFriction: 0 diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/LowFriction.asset.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/LowFriction.asset.meta new file mode 100644 index 00000000..621c0f4d --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/LowFriction.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b231b678223e044588ce32ebccbe77f3 +timeCreated: 1453427100 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/MediumFriction.asset b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/MediumFriction.asset new file mode 100644 index 00000000..bb418697 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/MediumFriction.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: MediumFriction + m_EditorClassIdentifier: + dynamicFriction: 0.1 + staticFriction: 0 + stickiness: 0 + stickDistance: 0 + frictionCombine: 0 + stickinessCombine: 0 + rollingContacts: 0 + rollingFriction: 0 diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/MediumFriction.asset.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/MediumFriction.asset.meta new file mode 100644 index 00000000..a03fa974 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/MediumFriction.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d368f2c47473d4bfb8dd9f08073cb403 +timeCreated: 1445322891 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFriction.asset b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFriction.asset new file mode 100644 index 00000000..7a63fa37 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFriction.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: RollingFriction + m_EditorClassIdentifier: + dynamicFriction: 0.7 + staticFriction: 0 + stickiness: 0 + stickDistance: 0 + frictionCombine: 0 + stickinessCombine: 3 + rollingContacts: 1 + rollingFriction: 0.2 diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFriction.asset.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFriction.asset.meta new file mode 100644 index 00000000..4411711b --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFriction.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e17a5bb573d9748ac8e836ddee291602 +timeCreated: 1453427102 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/VerySticky.asset b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/VerySticky.asset new file mode 100644 index 00000000..dddae90c --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/VerySticky.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: VerySticky + m_EditorClassIdentifier: + dynamicFriction: 0.3 + staticFriction: 0 + stickiness: 0.16 + stickDistance: 0.025 + frictionCombine: 3 + stickinessCombine: 3 + rollingContacts: 0 + rollingFriction: 0 diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/VerySticky.asset.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/VerySticky.asset.meta new file mode 100644 index 00000000..d763a6c2 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/VerySticky.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 06e7bfec7795f448eb8800edc99dbcf2 +timeCreated: 1453443046 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/DistanceFields.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/DistanceFields.meta new file mode 100644 index 00000000..a45a0fdb --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/DistanceFields.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 650750a778b8848c4ab561d23f15012e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/DistanceFields/EnvironmentDF.asset b/xiaofang/Assets/Obi/Samples/Common/SampleResources/DistanceFields/EnvironmentDF.asset new file mode 100644 index 00000000..73883510 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/DistanceFields/EnvironmentDF.asset @@ -0,0 +1,43450 @@ +%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: d31207380edf34b1b84ce50af22f2356, type: 3} + m_Name: EnvironmentDF + m_EditorClassIdentifier: + input: {fileID: 4300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + minNodeSize: 0.159375 + bounds: + m_Center: {x: 0, y: 2.5, z: 0} + m_Extent: {x: 5.1, y: 5.1, z: 5.1} + nodes: + - distancesA: {x: -2.7140436, y: -2.7140436, z: -2.623253, w: -2.623253} + distancesB: {x: -2.7140436, y: -2.7140436, z: -2.623253, w: -2.623253} + center: {x: 0, y: 2.5, z: 0, w: 5.1} + firstChild: 1 + - distancesA: {x: -2.7140436, y: -2.6575296, z: -0.34850723, w: -0.09999991} + distancesB: {x: -2.6575296, y: -2.6, z: -0.09999991, w: 2.5} + center: {x: -2.55, y: -0.049999952, z: -2.55, w: 2.55} + firstChild: 9 + - distancesA: {x: -2.6575296, y: -2.7140436, z: -0.09999991, w: -0.34850723} + distancesB: {x: -2.6, y: -2.6575296, z: 2.5, w: -0.09999991} + center: {x: -2.55, y: -0.049999952, z: 2.55, w: 2.55} + firstChild: 17 + - distancesA: {x: -0.34850723, y: -0.09999991, z: -2.6232536, w: -2.6019225} + distancesB: {x: -0.09999991, y: 2.5000002, z: -2.6019225, w: 5.635601} + center: {x: -2.55, y: 5.05, z: -2.55, w: 2.55} + firstChild: 25 + - distancesA: {x: -0.09999991, y: -0.34850723, z: -2.6019225, w: -2.6232536} + distancesB: {x: 2.5000002, y: -0.09999991, z: 5.635601, w: -2.6019225} + center: {x: -2.55, y: 5.05, z: 2.55, w: 2.55} + firstChild: 33 + - distancesA: {x: -2.6575296, y: -2.6, z: -0.09999991, w: 2.5} + distancesB: {x: -2.7140436, y: -2.6575296, z: -0.34850723, w: -0.09999991} + center: {x: 2.55, y: -0.049999952, z: -2.55, w: 2.55} + firstChild: 41 + - distancesA: {x: -2.6, y: -2.6575296, z: 2.5, w: -0.09999991} + distancesB: {x: -2.6575296, y: -2.7140436, z: -0.09999991, w: -0.34850723} + center: {x: 2.55, y: -0.049999952, z: 2.55, w: 2.55} + firstChild: 49 + - distancesA: {x: -0.09999991, y: 2.5000002, z: -2.6019225, w: 5.635601} + distancesB: {x: -0.34850723, y: -0.09999991, z: -2.6232536, w: -2.6019225} + center: {x: 2.55, y: 5.05, z: -2.55, w: 2.55} + firstChild: 57 + - distancesA: {x: 2.5000002, y: -0.09999991, z: 5.635601, w: -2.6019225} + distancesB: {x: -0.09999991, y: -0.34850723, z: -2.6019225, w: -2.6232536} + center: {x: 2.55, y: 5.05, z: 2.55, w: 2.55} + firstChild: 65 + - distancesA: {x: -2.7140436, y: -2.6575296, z: -0.51686305, w: -0.31512958} + distancesB: {x: -2.6575296, y: -2.6, z: -0.3151093, w: -0.049999956} + center: {x: -3.8249998, y: -1.3249999, z: -3.8249998, w: 1.275} + firstChild: 73 + - distancesA: {x: -2.6575296, y: -2.6575296, z: -0.31512958, w: -0.31510958} + distancesB: {x: -2.6, y: -2.6, z: -0.049999956, w: -0.049999956} + center: {x: -3.8249998, y: -1.3249999, z: -1.275, w: 1.275} + firstChild: 81 + - distancesA: {x: -0.51686305, y: -0.31512958, z: -0.34850723, w: -0.09999991} + distancesB: {x: -0.3151093, y: -0.049999956, z: -0.09999991, w: 2.4500003} + center: {x: -3.8249998, y: 1.225, z: -3.8249998, w: 1.275} + firstChild: 89 + - distancesA: {x: -0.31512958, y: -0.31510958, z: -0.09999991, w: -0.09999991} + distancesB: {x: -0.049999956, y: -0.049999956, z: 2.45, w: 2.4500003} + center: {x: -3.8249998, y: 1.225, z: -1.275, w: 1.275} + firstChild: 97 + - distancesA: {x: -2.6575296, y: -2.6, z: -0.3151093, w: -0.049999956} + distancesB: {x: -2.6575296, y: -2.6, z: -0.31510967, w: -0.049999956} + center: {x: -1.275, y: -1.3249999, z: -3.8249998, w: 1.275} + firstChild: 105 + - distancesA: {x: -2.6, y: -2.6, z: -0.049999956, w: -0.049999956} + distancesB: {x: -2.6, y: -2.6, z: -0.049999956, w: -0.049999956} + center: {x: -1.275, y: -1.3249999, z: -1.275, w: 1.275} + firstChild: 113 + - distancesA: {x: -0.3151093, y: -0.049999956, z: -0.09999991, w: 2.45} + distancesB: {x: -0.31510967, y: -0.049999956, z: -0.09999991, w: 2.4500003} + center: {x: -1.275, y: 1.225, z: -3.8249998, w: 1.275} + firstChild: 121 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 2.45, w: 2.45} + distancesB: {x: -0.049999956, y: -0.049999956, z: 2.45, w: 2.5} + center: {x: -1.275, y: 1.225, z: -1.275, w: 1.275} + firstChild: 129 + - distancesA: {x: -2.6575296, y: -2.6575296, z: -0.31510958, w: -0.31511036} + distancesB: {x: -2.6, y: -2.6, z: -0.049999956, w: -0.049999956} + center: {x: -3.8249998, y: -1.3249999, z: 1.275, w: 1.275} + firstChild: 137 + - distancesA: {x: -2.6575296, y: -2.7140436, z: -0.31511015, w: -0.51686305} + distancesB: {x: -2.6, y: -2.6575296, z: -0.049999956, w: -0.31512958} + center: {x: -3.8249998, y: -1.3249999, z: 3.8249998, w: 1.275} + firstChild: 145 + - distancesA: {x: -0.31510958, y: -0.31511036, z: -0.09999991, w: -0.09999991} + distancesB: {x: -0.049999956, y: -0.049999956, z: 2.4500003, w: 2.45} + center: {x: -3.8249998, y: 1.225, z: 1.275, w: 1.275} + firstChild: 153 + - distancesA: {x: -0.31511015, y: -0.51686305, z: -0.09999991, w: -0.34850723} + distancesB: {x: -0.049999956, y: -0.31512958, z: 2.4500003, w: -0.09999991} + center: {x: -3.8249998, y: 1.225, z: 3.8249998, w: 1.275} + firstChild: 161 + - distancesA: {x: -2.6, y: -2.6, z: -0.049999956, w: -0.049999956} + distancesB: {x: -2.6, y: -2.6, z: -0.049999956, w: -0.049999956} + center: {x: -1.275, y: -1.3249999, z: 1.275, w: 1.275} + firstChild: 169 + - distancesA: {x: -2.6, y: -2.6575296, z: -0.049999956, w: -0.31512958} + distancesB: {x: -2.6, y: -2.6575296, z: -0.049999956, w: -0.31510958} + center: {x: -1.275, y: -1.3249999, z: 3.8249998, w: 1.275} + firstChild: 177 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 2.45, w: 2.45} + distancesB: {x: -0.049999956, y: -0.049999956, z: 2.5, w: 2.45} + center: {x: -1.275, y: 1.225, z: 1.275, w: 1.275} + firstChild: 185 + - distancesA: {x: -0.049999956, y: -0.31512958, z: 2.45, w: -0.09999991} + distancesB: {x: -0.049999956, y: -0.31510958, z: 2.4500003, w: -0.09999991} + center: {x: -1.275, y: 1.225, z: 3.8249998, w: 1.275} + firstChild: 193 + - distancesA: {x: -0.34850723, y: -0.09999991, z: -0.3520757, w: -0.1118034} + distancesB: {x: -0.09999991, y: 2.4500003, z: -0.1118034, w: 2.4505103} + center: {x: -3.8249998, y: 3.775, z: -3.8249998, w: 1.275} + firstChild: 201 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 2.45, y: 2.4500003, z: 2.4505103, w: 2.4505103} + center: {x: -3.8249998, y: 3.775, z: -1.275, w: 1.275} + firstChild: 209 + - distancesA: {x: -0.3520757, y: -0.1118034, z: -2.6232536, w: -2.6019225} + distancesB: {x: -0.1118034, y: 2.4505103, z: -2.6019225, w: 3.5724647} + center: {x: -3.8249998, y: 6.3250003, z: -3.8249998, w: 1.275} + firstChild: 217 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -2.6019225, w: -2.6019225} + distancesB: {x: 2.4505103, y: 2.4505103, z: 3.5724645, w: 3.5724647} + center: {x: -3.8249998, y: 6.3250003, z: -1.275, w: 1.275} + firstChild: 225 + - distancesA: {x: -0.09999991, y: 2.45, z: -0.1118034, w: 2.4505103} + distancesB: {x: -0.09999991, y: 2.4500003, z: -0.1118034, w: 2.4505103} + center: {x: -1.275, y: 3.775, z: -3.8249998, w: 1.275} + firstChild: 233 + - distancesA: {x: 2.45, y: 2.45, z: 2.4505103, w: 2.4505103} + distancesB: {x: 2.45, y: 2.5, z: 2.4505103, w: 5.00025} + center: {x: -1.275, y: 3.775, z: -1.275, w: 1.275} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 2.4505103, z: -2.6019225, w: 3.5724645} + distancesB: {x: -0.1118034, y: 2.4505103, z: -2.6019225, w: 3.5724647} + center: {x: -1.275, y: 6.3250003, z: -3.8249998, w: 1.275} + firstChild: 241 + - distancesA: {x: 2.4505103, y: 2.4505103, z: 3.5724645, w: 3.5724645} + distancesB: {x: 2.4505103, y: 5.00025, z: 3.5724645, w: 5.635601} + center: {x: -1.275, y: 6.3250003, z: -1.275, w: 1.275} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 2.4500003, y: 2.45, z: 2.4505103, w: 2.4505103} + center: {x: -3.8249998, y: 3.775, z: 1.275, w: 1.275} + firstChild: 249 + - distancesA: {x: -0.09999991, y: -0.34850723, z: -0.1118034, w: -0.3520757} + distancesB: {x: 2.4500003, y: -0.09999991, z: 2.4505103, w: -0.1118034} + center: {x: -3.8249998, y: 3.775, z: 3.8249998, w: 1.275} + firstChild: 257 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -2.6019225, w: -2.6019225} + distancesB: {x: 2.4505103, y: 2.4505103, z: 3.5724647, w: 3.5724645} + center: {x: -3.8249998, y: 6.3250003, z: 1.275, w: 1.275} + firstChild: 265 + - distancesA: {x: -0.1118034, y: -0.3520757, z: -2.6019225, w: -2.6232536} + distancesB: {x: 2.4505103, y: -0.1118034, z: 3.5724647, w: -2.6019225} + center: {x: -3.8249998, y: 6.3250003, z: 3.8249998, w: 1.275} + firstChild: 273 + - distancesA: {x: 2.45, y: 2.45, z: 2.4505103, w: 2.4505103} + distancesB: {x: 2.5, y: 2.45, z: 5.00025, w: 2.4505103} + center: {x: -1.275, y: 3.775, z: 1.275, w: 1.275} + firstChild: -1 + - distancesA: {x: 2.45, y: -0.09999991, z: 2.4505103, w: -0.1118034} + distancesB: {x: 2.4500003, y: -0.09999991, z: 2.4505103, w: -0.1118034} + center: {x: -1.275, y: 3.775, z: 3.8249998, w: 1.275} + firstChild: 281 + - distancesA: {x: 2.4505103, y: 2.4505103, z: 3.5724645, w: 3.5724645} + distancesB: {x: 5.00025, y: 2.4505103, z: 5.635601, w: 3.5724645} + center: {x: -1.275, y: 6.3250003, z: 1.275, w: 1.275} + firstChild: -1 + - distancesA: {x: 2.4505103, y: -0.1118034, z: 3.5724645, w: -2.6019225} + distancesB: {x: 2.4505103, y: -0.1118034, z: 3.5724647, w: -2.6019225} + center: {x: -1.275, y: 6.3250003, z: 3.8249998, w: 1.275} + firstChild: 289 + - distancesA: {x: -2.6575296, y: -2.6, z: -0.31510967, w: -0.049999956} + distancesB: {x: -2.6575296, y: -2.6, z: -0.31510967, w: -0.049999956} + center: {x: 1.275, y: -1.3249999, z: -3.8249998, w: 1.275} + firstChild: 297 + - distancesA: {x: -2.6, y: -2.6, z: -0.049999956, w: -0.049999956} + distancesB: {x: -2.6, y: -2.6, z: -0.049999956, w: -0.049999956} + center: {x: 1.275, y: -1.3249999, z: -1.275, w: 1.275} + firstChild: 305 + - distancesA: {x: -0.31510967, y: -0.049999956, z: -0.09999991, w: 2.4500003} + distancesB: {x: -0.31510967, y: -0.049999956, z: -0.09999991, w: 2.45} + center: {x: 1.275, y: 1.225, z: -3.8249998, w: 1.275} + firstChild: 313 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 2.45, w: 2.5} + distancesB: {x: -0.049999956, y: -0.049999956, z: 2.45, w: 2.45} + center: {x: 1.275, y: 1.225, z: -1.275, w: 1.275} + firstChild: 321 + - distancesA: {x: -2.6575296, y: -2.6, z: -0.31510967, w: -0.049999956} + distancesB: {x: -2.7140436, y: -2.6575296, z: -0.51686305, w: -0.3151093} + center: {x: 3.8249998, y: -1.3249999, z: -3.8249998, w: 1.275} + firstChild: 329 + - distancesA: {x: -2.6, y: -2.6, z: -0.049999956, w: -0.049999956} + distancesB: {x: -2.6575296, y: -2.6575296, z: -0.3151093, w: -0.31510967} + center: {x: 3.8249998, y: -1.3249999, z: -1.275, w: 1.275} + firstChild: 337 + - distancesA: {x: -0.31510967, y: -0.049999956, z: -0.09999991, w: 2.4500003} + distancesB: {x: -0.51686305, y: -0.3151093, z: -0.34850723, w: -0.09999991} + center: {x: 3.8249998, y: 1.225, z: -3.8249998, w: 1.275} + firstChild: 345 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 2.45, w: 2.4500003} + distancesB: {x: -0.3151093, y: -0.31510967, z: -0.09999991, w: -0.09999991} + center: {x: 3.8249998, y: 1.225, z: -1.275, w: 1.275} + firstChild: 353 + - distancesA: {x: -2.6, y: -2.6, z: -0.049999956, w: -0.049999956} + distancesB: {x: -2.6, y: -2.6, z: -0.049999956, w: -0.049999956} + center: {x: 1.275, y: -1.3249999, z: 1.275, w: 1.275} + firstChild: 361 + - distancesA: {x: -2.6, y: -2.6575296, z: -0.049999956, w: -0.31510958} + distancesB: {x: -2.6, y: -2.6575296, z: -0.049999956, w: -0.31511036} + center: {x: 1.275, y: -1.3249999, z: 3.8249998, w: 1.275} + firstChild: 369 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 2.5, w: 2.45} + distancesB: {x: -0.049999956, y: -0.049999956, z: 2.45, w: 2.45} + center: {x: 1.275, y: 1.225, z: 1.275, w: 1.275} + firstChild: 377 + - distancesA: {x: -0.049999956, y: -0.31510958, z: 2.4500003, w: -0.09999991} + distancesB: {x: -0.049999956, y: -0.31511036, z: 2.45, w: -0.09999991} + center: {x: 1.275, y: 1.225, z: 3.8249998, w: 1.275} + firstChild: 385 + - distancesA: {x: -2.6, y: -2.6, z: -0.049999956, w: -0.049999956} + distancesB: {x: -2.6575296, y: -2.6575296, z: -0.31510967, w: -0.31510967} + center: {x: 3.8249998, y: -1.3249999, z: 1.275, w: 1.275} + firstChild: 393 + - distancesA: {x: -2.6, y: -2.6575296, z: -0.049999956, w: -0.31511015} + distancesB: {x: -2.6575296, y: -2.7140436, z: -0.31510967, w: -0.51686305} + center: {x: 3.8249998, y: -1.3249999, z: 3.8249998, w: 1.275} + firstChild: 401 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 2.4500003, w: 2.45} + distancesB: {x: -0.31510967, y: -0.31510967, z: -0.09999991, w: -0.09999991} + center: {x: 3.8249998, y: 1.225, z: 1.275, w: 1.275} + firstChild: 409 + - distancesA: {x: -0.049999956, y: -0.31511015, z: 2.4500003, w: -0.09999991} + distancesB: {x: -0.31510967, y: -0.51686305, z: -0.09999991, w: -0.34850723} + center: {x: 3.8249998, y: 1.225, z: 3.8249998, w: 1.275} + firstChild: 417 + - distancesA: {x: -0.09999991, y: 2.4500003, z: -0.1118034, w: 2.4505103} + distancesB: {x: -0.09999991, y: 2.45, z: -0.1118034, w: 2.4505103} + center: {x: 1.275, y: 3.775, z: -3.8249998, w: 1.275} + firstChild: 425 + - distancesA: {x: 2.45, y: 2.5, z: 2.4505103, w: 5.00025} + distancesB: {x: 2.45, y: 2.45, z: 2.4505103, w: 2.4505103} + center: {x: 1.275, y: 3.775, z: -1.275, w: 1.275} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 2.4505103, z: -2.6019225, w: 3.5724647} + distancesB: {x: -0.1118034, y: 2.4505103, z: -2.6019225, w: 3.5724645} + center: {x: 1.275, y: 6.3250003, z: -3.8249998, w: 1.275} + firstChild: 433 + - distancesA: {x: 2.4505103, y: 5.00025, z: 3.5724645, w: 5.635601} + distancesB: {x: 2.4505103, y: 2.4505103, z: 3.5724645, w: 3.5724645} + center: {x: 1.275, y: 6.3250003, z: -1.275, w: 1.275} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 2.4500003, z: -0.1118034, w: 2.4505103} + distancesB: {x: -0.34850723, y: -0.09999991, z: -0.3520757, w: -0.1118034} + center: {x: 3.8249998, y: 3.775, z: -3.8249998, w: 1.275} + firstChild: 441 + - distancesA: {x: 2.45, y: 2.4500003, z: 2.4505103, w: 2.4505103} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 3.8249998, y: 3.775, z: -1.275, w: 1.275} + firstChild: 449 + - distancesA: {x: -0.1118034, y: 2.4505103, z: -2.6019225, w: 3.5724647} + distancesB: {x: -0.3520757, y: -0.1118034, z: -2.6232536, w: -2.6019225} + center: {x: 3.8249998, y: 6.3250003, z: -3.8249998, w: 1.275} + firstChild: 457 + - distancesA: {x: 2.4505103, y: 2.4505103, z: 3.5724645, w: 3.5724647} + distancesB: {x: -0.1118034, y: -0.1118034, z: -2.6019225, w: -2.6019225} + center: {x: 3.8249998, y: 6.3250003, z: -1.275, w: 1.275} + firstChild: 465 + - distancesA: {x: 2.5, y: 2.45, z: 5.00025, w: 2.4505103} + distancesB: {x: 2.45, y: 2.45, z: 2.4505103, w: 2.4505103} + center: {x: 1.275, y: 3.775, z: 1.275, w: 1.275} + firstChild: -1 + - distancesA: {x: 2.4500003, y: -0.09999991, z: 2.4505103, w: -0.1118034} + distancesB: {x: 2.45, y: -0.09999991, z: 2.4505103, w: -0.1118034} + center: {x: 1.275, y: 3.775, z: 3.8249998, w: 1.275} + firstChild: 473 + - distancesA: {x: 5.00025, y: 2.4505103, z: 5.635601, w: 3.5724645} + distancesB: {x: 2.4505103, y: 2.4505103, z: 3.5724645, w: 3.5724645} + center: {x: 1.275, y: 6.3250003, z: 1.275, w: 1.275} + firstChild: -1 + - distancesA: {x: 2.4505103, y: -0.1118034, z: 3.5724647, w: -2.6019225} + distancesB: {x: 2.4505103, y: -0.1118034, z: 3.5724645, w: -2.6019225} + center: {x: 1.275, y: 6.3250003, z: 3.8249998, w: 1.275} + firstChild: 481 + - distancesA: {x: 2.4500003, y: 2.45, z: 2.4505103, w: 2.4505103} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 3.8249998, y: 3.775, z: 1.275, w: 1.275} + firstChild: 489 + - distancesA: {x: 2.4500003, y: -0.09999991, z: 2.4505103, w: -0.1118034} + distancesB: {x: -0.09999991, y: -0.34850723, z: -0.1118034, w: -0.3520757} + center: {x: 3.8249998, y: 3.775, z: 3.8249998, w: 1.275} + firstChild: 497 + - distancesA: {x: 2.4505103, y: 2.4505103, z: 3.5724647, w: 3.5724645} + distancesB: {x: -0.1118034, y: -0.1118034, z: -2.6019225, w: -2.6019225} + center: {x: 3.8249998, y: 6.3250003, z: 1.275, w: 1.275} + firstChild: 505 + - distancesA: {x: 2.4505103, y: -0.1118034, z: 3.5724647, w: -2.6019225} + distancesB: {x: -0.1118034, y: -0.3520757, z: -2.6019225, w: -2.6232536} + center: {x: 3.8249998, y: 6.3250003, z: 3.8249998, w: 1.275} + firstChild: 513 + - distancesA: {x: -2.7140434, y: -2.6575296, z: -1.5167223, w: -1.4229815} + distancesB: {x: -2.6575296, y: -2.6, z: -1.4229891, w: -1.3249998} + center: {x: -4.4624996, y: -1.9624999, z: -4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6575296, y: -2.6575296, z: -1.4229815, w: -1.4229816} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -4.4624996, y: -1.9624999, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.5167226, y: -1.4229816, z: -0.51686233, w: -0.31514108} + distancesB: {x: -1.4229892, y: -1.3249999, z: -0.31510916, w: -0.049999956} + center: {x: -4.4624996, y: -0.68749994, z: -4.4624996, w: 0.6375} + firstChild: 521 + - distancesA: {x: -1.4229816, y: -1.4229817, z: -0.31511882, w: -0.31512922} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -4.4624996, y: -0.68749994, z: -3.1874998, w: 0.6375} + firstChild: 529 + - distancesA: {x: -2.6575296, y: -2.6, z: -1.4229838, w: -1.3249998} + distancesB: {x: -2.6575296, y: -2.6, z: -1.422986, w: -1.3249998} + center: {x: -3.1874998, y: -1.9624999, z: -4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -3.1874998, y: -1.9624999, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.4229839, y: -1.3249999, z: -0.31510916, w: -0.049999956} + distancesB: {x: -1.422986, y: -1.3249999, z: -0.31510916, w: -0.049999956} + center: {x: -3.1874998, y: -0.68749994, z: -4.4624996, w: 0.6375} + firstChild: 537 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -3.1874998, y: -0.68749994, z: -3.1874998, w: 0.6375} + firstChild: 545 + - distancesA: {x: -2.6575296, y: -2.6575296, z: -1.4229816, w: -1.4229815} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -4.4624996, y: -1.9624999, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6575296, y: -2.6575296, z: -1.4229815, w: -1.4229816} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -4.4624996, y: -1.9624999, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.4229817, y: -1.4229816, z: -0.31512922, w: -0.315111} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -4.4624996, y: -0.68749994, z: -1.9124999, w: 0.6375} + firstChild: 553 + - distancesA: {x: -1.4229816, y: -1.4229817, z: -0.315111, w: -0.31510922} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -4.4624996, y: -0.68749994, z: -0.6375, w: 0.6375} + firstChild: 561 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -3.1874998, y: -1.9624999, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -3.1874998, y: -1.9624999, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -3.1874998, y: -0.68749994, z: -1.9124999, w: 0.6375} + firstChild: 569 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -3.1874998, y: -0.68749994, z: -0.6375, w: 0.6375} + firstChild: 577 + - distancesA: {x: -0.51686233, y: -0.31514108, z: -0.34850657, w: -0.09999943} + distancesB: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 1.1750003} + center: {x: -4.4624996, y: 0.58750004, z: -4.4624996, w: 0.6375} + firstChild: 585 + - distancesA: {x: -0.31511882, y: -0.31512922, z: -0.09999943, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.1750003} + center: {x: -4.4624996, y: 0.58750004, z: -3.1874998, w: 0.6375} + firstChild: 593 + - distancesA: {x: -0.34850657, y: -0.09999943, z: -0.34850657, w: -0.09999943} + distancesB: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + center: {x: -4.4624996, y: 1.8625, z: -4.4624996, w: 0.6375} + firstChild: 601 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 1.1750002, y: 1.1750003, z: 1.1750002, w: 1.1750003} + center: {x: -4.4624996, y: 1.8625, z: -3.1874998, w: 0.6375} + firstChild: 609 + - distancesA: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 1.1750002} + distancesB: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 1.1750003} + center: {x: -3.1874998, y: 0.58750004, z: -4.4624996, w: 0.6375} + firstChild: 617 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.1750002} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.225} + center: {x: -3.1874998, y: 0.58750004, z: -3.1874998, w: 0.6375} + firstChild: 625 + - distancesA: {x: -0.09999943, y: 1.1750002, z: -0.09999943, w: 1.1750002} + distancesB: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + center: {x: -3.1874998, y: 1.8625, z: -4.4624996, w: 0.6375} + firstChild: 633 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 1.1750002, y: 1.2249999, z: 1.1750002, w: 2.4500003} + center: {x: -3.1874998, y: 1.8625, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.31512922, y: -0.315111, z: -0.09999943, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.1750003, w: 1.1750003} + center: {x: -4.4624996, y: 0.58750004, z: -1.9124999, w: 0.6375} + firstChild: 641 + - distancesA: {x: -0.315111, y: -0.31510922, z: -0.09999943, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.1750003, w: 1.1750003} + center: {x: -4.4624996, y: 0.58750004, z: -0.6375, w: 0.6375} + firstChild: 649 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 1.1750003, y: 1.1750003, z: 1.1750003, w: 1.1750003} + center: {x: -4.4624996, y: 1.8625, z: -1.9124999, w: 0.6375} + firstChild: 657 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 1.1750003, y: 1.1750003, z: 1.1750003, w: 1.1750003} + center: {x: -4.4624996, y: 1.8625, z: -0.6375, w: 0.6375} + firstChild: 665 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.1750002} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + center: {x: -3.1874998, y: 0.58750004, z: -1.9124999, w: 0.6375} + firstChild: 673 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.1750002} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + center: {x: -3.1874998, y: 0.58750004, z: -0.6375, w: 0.6375} + firstChild: 681 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 1.2249999, y: 1.2249999, z: 2.45, w: 2.4500003} + center: {x: -3.1874998, y: 1.8625, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 1.2249999, y: 1.2249999, z: 2.4500003, w: 2.4500003} + center: {x: -3.1874998, y: 1.8625, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6575296, y: -2.6, z: -1.422986, w: -1.3249998} + distancesB: {x: -2.6575296, y: -2.6, z: -1.422982, w: -1.3249998} + center: {x: -1.9124999, y: -1.9624999, z: -4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -1.9124999, y: -1.9624999, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.422986, y: -1.3249999, z: -0.31510916, w: -0.049999956} + distancesB: {x: -1.422982, y: -1.3249999, z: -0.3151088, w: -0.049999956} + center: {x: -1.9124999, y: -0.68749994, z: -4.4624996, w: 0.6375} + firstChild: 689 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -1.9124999, y: -0.68749994, z: -3.1874998, w: 0.6375} + firstChild: 697 + - distancesA: {x: -2.6575296, y: -2.6, z: -1.422982, w: -1.3249998} + distancesB: {x: -2.6575296, y: -2.6, z: -1.4229816, w: -1.3249998} + center: {x: -0.6375, y: -1.9624999, z: -4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -0.6375, y: -1.9624999, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.422982, y: -1.3249999, z: -0.3151088, w: -0.049999956} + distancesB: {x: -1.4229816, y: -1.3249999, z: -0.31510916, w: -0.049999956} + center: {x: -0.6375, y: -0.68749994, z: -4.4624996, w: 0.6375} + firstChild: 705 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -0.6375, y: -0.68749994, z: -3.1874998, w: 0.6375} + firstChild: 713 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -1.9124999, y: -1.9624999, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -1.9124999, y: -1.9624999, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -1.9124999, y: -0.68749994, z: -1.9124999, w: 0.6375} + firstChild: 721 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -1.9124999, y: -0.68749994, z: -0.6375, w: 0.6375} + firstChild: 729 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -0.6375, y: -1.9624999, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -0.6375, y: -1.9624999, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -0.6375, y: -0.68749994, z: -1.9124999, w: 0.6375} + firstChild: 737 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -0.6375, y: -0.68749994, z: -0.6375, w: 0.6375} + firstChild: 745 + - distancesA: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 1.1750003} + distancesB: {x: -0.3151088, y: -0.049999956, z: -0.09999943, w: 1.1750003} + center: {x: -1.9124999, y: 0.58750004, z: -4.4624996, w: 0.6375} + firstChild: 753 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.225} + center: {x: -1.9124999, y: 0.58750004, z: -3.1874998, w: 0.6375} + firstChild: 761 + - distancesA: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + distancesB: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + center: {x: -1.9124999, y: 1.8625, z: -4.4624996, w: 0.6375} + firstChild: 769 + - distancesA: {x: 1.1750002, y: 1.2249999, z: 1.1750002, w: 2.45} + distancesB: {x: 1.1750002, y: 1.2249999, z: 1.1750002, w: 2.4500003} + center: {x: -1.9124999, y: 1.8625, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.3151088, y: -0.049999956, z: -0.09999943, w: 1.1750003} + distancesB: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 1.1750003} + center: {x: -0.6375, y: 0.58750004, z: -4.4624996, w: 0.6375} + firstChild: 777 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.225} + center: {x: -0.6375, y: 0.58750004, z: -3.1874998, w: 0.6375} + firstChild: 785 + - distancesA: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + distancesB: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + center: {x: -0.6375, y: 1.8625, z: -4.4624996, w: 0.6375} + firstChild: 793 + - distancesA: {x: 1.1750002, y: 1.2249999, z: 1.1750002, w: 2.4500003} + distancesB: {x: 1.1750002, y: 1.2249999, z: 1.1750002, w: 2.4500003} + center: {x: -0.6375, y: 1.8625, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + center: {x: -1.9124999, y: 0.58750004, z: -1.9124999, w: 0.6375} + firstChild: 801 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + center: {x: -1.9124999, y: 0.58750004, z: -0.6375, w: 0.6375} + firstChild: 809 + - distancesA: {x: 1.2249999, y: 1.2249999, z: 2.45, w: 2.45} + distancesB: {x: 1.2249999, y: 1.2249999, z: 2.45, w: 2.5} + center: {x: -1.9124999, y: 1.8625, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.2249999, y: 1.2249999, z: 2.45, w: 2.45} + distancesB: {x: 1.2249999, y: 1.2249999, z: 2.5, w: 2.5} + center: {x: -1.9124999, y: 1.8625, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + center: {x: -0.6375, y: 0.58750004, z: -1.9124999, w: 0.6375} + firstChild: 817 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + center: {x: -0.6375, y: 0.58750004, z: -0.6375, w: 0.6375} + firstChild: 825 + - distancesA: {x: 1.2249999, y: 1.2249999, z: 2.45, w: 2.5} + distancesB: {x: 1.2249999, y: 1.2249999, z: 2.45, w: 2.5} + center: {x: -0.6375, y: 1.8625, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.2249999, y: 1.2249999, z: 2.5, w: 2.5} + distancesB: {x: 1.2249999, y: 1.2249999, z: 2.5, w: 2.5} + center: {x: -0.6375, y: 1.8625, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6575296, y: -2.6575296, z: -1.4229816, w: -1.4229815} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -4.4624996, y: -1.9624999, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6575296, y: -2.6575296, z: -1.4229815, w: -1.4229815} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -4.4624996, y: -1.9624999, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.4229817, y: -1.4229816, z: -0.31510922, w: -0.315111} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -4.4624996, y: -0.68749994, z: 0.6375, w: 0.6375} + firstChild: 833 + - distancesA: {x: -1.4229816, y: -1.4229816, z: -0.315111, w: -0.31511} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -4.4624996, y: -0.68749994, z: 1.9124999, w: 0.6375} + firstChild: 841 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -3.1874998, y: -1.9624999, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -3.1874998, y: -1.9624999, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -3.1874998, y: -0.68749994, z: 0.6375, w: 0.6375} + firstChild: 849 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -3.1874998, y: -0.68749994, z: 1.9124999, w: 0.6375} + firstChild: 857 + - distancesA: {x: -2.6575296, y: -2.6575296, z: -1.4229815, w: -1.4229816} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -4.4624996, y: -1.9624999, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6575296, y: -2.7140434, z: -1.4229816, w: -1.5167223} + distancesB: {x: -2.6, y: -2.6575296, z: -1.3249998, w: -1.4229815} + center: {x: -4.4624996, y: -1.9624999, z: 4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.4229816, y: -1.4229817, z: -0.3151098, w: -0.31510893} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -4.4624996, y: -0.68749994, z: 3.1874998, w: 0.6375} + firstChild: 865 + - distancesA: {x: -1.4229817, y: -1.5167226, z: -0.31510893, w: -0.51686233} + distancesB: {x: -1.3249999, y: -1.4229816, z: -0.049999956, w: -0.31514108} + center: {x: -4.4624996, y: -0.68749994, z: 4.4624996, w: 0.6375} + firstChild: 873 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -3.1874998, y: -1.9624999, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6575296, z: -1.3249998, w: -1.4229815} + distancesB: {x: -2.6, y: -2.6575296, z: -1.3249998, w: -1.4229816} + center: {x: -3.1874998, y: -1.9624999, z: 4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -3.1874998, y: -0.68749994, z: 3.1874998, w: 0.6375} + firstChild: 881 + - distancesA: {x: -1.3249999, y: -1.4229816, z: -0.049999956, w: -0.31511882} + distancesB: {x: -1.3249999, y: -1.4229817, z: -0.049999956, w: -0.31512922} + center: {x: -3.1874998, y: -0.68749994, z: 4.4624996, w: 0.6375} + firstChild: 889 + - distancesA: {x: -0.31510922, y: -0.315111, z: -0.09999943, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.1750003, w: 1.1750003} + center: {x: -4.4624996, y: 0.58750004, z: 0.6375, w: 0.6375} + firstChild: 897 + - distancesA: {x: -0.315111, y: -0.31511, z: -0.09999943, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.1750003, w: 1.1750003} + center: {x: -4.4624996, y: 0.58750004, z: 1.9124999, w: 0.6375} + firstChild: 905 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 1.1750003, y: 1.1750003, z: 1.1750003, w: 1.1750003} + center: {x: -4.4624996, y: 1.8625, z: 0.6375, w: 0.6375} + firstChild: 913 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 1.1750003, y: 1.1750003, z: 1.1750003, w: 1.1750003} + center: {x: -4.4624996, y: 1.8625, z: 1.9124999, w: 0.6375} + firstChild: 921 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.1750002} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + center: {x: -3.1874998, y: 0.58750004, z: 0.6375, w: 0.6375} + firstChild: 929 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.1750002} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + center: {x: -3.1874998, y: 0.58750004, z: 1.9124999, w: 0.6375} + firstChild: 937 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 1.2249999, y: 1.2249999, z: 2.4500003, w: 2.4500003} + center: {x: -3.1874998, y: 1.8625, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 1.2249999, y: 1.2249999, z: 2.4500003, w: 2.45} + center: {x: -3.1874998, y: 1.8625, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.3151098, y: -0.31510893, z: -0.09999943, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.1750003, w: 1.1750002} + center: {x: -4.4624996, y: 0.58750004, z: 3.1874998, w: 0.6375} + firstChild: 945 + - distancesA: {x: -0.31510893, y: -0.51686233, z: -0.09999943, w: -0.34850657} + distancesB: {x: -0.049999956, y: -0.31514108, z: 1.1750003, w: -0.09999943} + center: {x: -4.4624996, y: 0.58750004, z: 4.4624996, w: 0.6375} + firstChild: 953 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 1.1750003, y: 1.1750002, z: 1.1750003, w: 1.1750002} + center: {x: -4.4624996, y: 1.8625, z: 3.1874998, w: 0.6375} + firstChild: 961 + - distancesA: {x: -0.09999943, y: -0.34850657, z: -0.09999943, w: -0.34850657} + distancesB: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + center: {x: -4.4624996, y: 1.8625, z: 4.4624996, w: 0.6375} + firstChild: 969 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.1750002} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.1750002} + center: {x: -3.1874998, y: 0.58750004, z: 3.1874998, w: 0.6375} + firstChild: 977 + - distancesA: {x: -0.049999956, y: -0.31511882, z: 1.1750002, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.31512922, z: 1.1750003, w: -0.09999943} + center: {x: -3.1874998, y: 0.58750004, z: 4.4624996, w: 0.6375} + firstChild: 985 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 1.2249999, y: 1.1750002, z: 2.4500003, w: 1.1750002} + center: {x: -3.1874998, y: 1.8625, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750002, y: -0.09999943, z: 1.1750002, w: -0.09999943} + distancesB: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + center: {x: -3.1874998, y: 1.8625, z: 4.4624996, w: 0.6375} + firstChild: 993 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -1.9124999, y: -1.9624999, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -1.9124999, y: -1.9624999, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -1.9124999, y: -0.68749994, z: 0.6375, w: 0.6375} + firstChild: 1001 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -1.9124999, y: -0.68749994, z: 1.9124999, w: 0.6375} + firstChild: 1009 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -0.6375, y: -1.9624999, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -0.6375, y: -1.9624999, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -0.6375, y: -0.68749994, z: 0.6375, w: 0.6375} + firstChild: 1017 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -0.6375, y: -0.68749994, z: 1.9124999, w: 0.6375} + firstChild: 1025 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -1.9124999, y: -1.9624999, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6575296, z: -1.3249998, w: -1.4229816} + distancesB: {x: -2.6, y: -2.6575296, z: -1.3249998, w: -1.4229815} + center: {x: -1.9124999, y: -1.9624999, z: 4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -1.9124999, y: -0.68749994, z: 3.1874998, w: 0.6375} + firstChild: 1033 + - distancesA: {x: -1.3249999, y: -1.4229817, z: -0.049999956, w: -0.31512922} + distancesB: {x: -1.3249999, y: -1.4229816, z: -0.049999956, w: -0.315111} + center: {x: -1.9124999, y: -0.68749994, z: 4.4624996, w: 0.6375} + firstChild: 1041 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: -0.6375, y: -1.9624999, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6575296, z: -1.3249998, w: -1.4229815} + distancesB: {x: -2.6, y: -2.6575296, z: -1.3249998, w: -1.4229816} + center: {x: -0.6375, y: -1.9624999, z: 4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: -0.6375, y: -0.68749994, z: 3.1874998, w: 0.6375} + firstChild: 1049 + - distancesA: {x: -1.3249999, y: -1.4229816, z: -0.049999956, w: -0.315111} + distancesB: {x: -1.3249999, y: -1.4229817, z: -0.049999956, w: -0.31510922} + center: {x: -0.6375, y: -0.68749994, z: 4.4624996, w: 0.6375} + firstChild: 1057 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + center: {x: -1.9124999, y: 0.58750004, z: 0.6375, w: 0.6375} + firstChild: 1065 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + center: {x: -1.9124999, y: 0.58750004, z: 1.9124999, w: 0.6375} + firstChild: 1073 + - distancesA: {x: 1.2249999, y: 1.2249999, z: 2.45, w: 2.45} + distancesB: {x: 1.2249999, y: 1.2249999, z: 2.5, w: 2.5} + center: {x: -1.9124999, y: 1.8625, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.2249999, y: 1.2249999, z: 2.45, w: 2.45} + distancesB: {x: 1.2249999, y: 1.2249999, z: 2.5, w: 2.45} + center: {x: -1.9124999, y: 1.8625, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + center: {x: -0.6375, y: 0.58750004, z: 0.6375, w: 0.6375} + firstChild: 1081 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + center: {x: -0.6375, y: 0.58750004, z: 1.9124999, w: 0.6375} + firstChild: 1089 + - distancesA: {x: 1.2249999, y: 1.2249999, z: 2.5, w: 2.5} + distancesB: {x: 1.2249999, y: 1.2249999, z: 2.5, w: 2.5} + center: {x: -0.6375, y: 1.8625, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.2249999, y: 1.2249999, z: 2.5, w: 2.45} + distancesB: {x: 1.2249999, y: 1.2249999, z: 2.5, w: 2.45} + center: {x: -0.6375, y: 1.8625, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.1750002} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.1750002} + center: {x: -1.9124999, y: 0.58750004, z: 3.1874998, w: 0.6375} + firstChild: 1097 + - distancesA: {x: -0.049999956, y: -0.31512922, z: 1.1750003, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.315111, z: 1.1750003, w: -0.09999943} + center: {x: -1.9124999, y: 0.58750004, z: 4.4624996, w: 0.6375} + firstChild: 1105 + - distancesA: {x: 1.2249999, y: 1.1750002, z: 2.45, w: 1.1750002} + distancesB: {x: 1.2249999, y: 1.1750002, z: 2.4500003, w: 1.1750002} + center: {x: -1.9124999, y: 1.8625, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + distancesB: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + center: {x: -1.9124999, y: 1.8625, z: 4.4624996, w: 0.6375} + firstChild: 1113 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.1750002} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.1750002} + center: {x: -0.6375, y: 0.58750004, z: 3.1874998, w: 0.6375} + firstChild: 1121 + - distancesA: {x: -0.049999956, y: -0.315111, z: 1.1750003, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.31510922, z: 1.1750003, w: -0.09999943} + center: {x: -0.6375, y: 0.58750004, z: 4.4624996, w: 0.6375} + firstChild: 1129 + - distancesA: {x: 1.2249999, y: 1.1750002, z: 2.4500003, w: 1.1750002} + distancesB: {x: 1.2249999, y: 1.1750002, z: 2.4500003, w: 1.1750002} + center: {x: -0.6375, y: 1.8625, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + distancesB: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + center: {x: -0.6375, y: 1.8625, z: 4.4624996, w: 0.6375} + firstChild: 1137 + - distancesA: {x: -0.34850657, y: -0.09999943, z: -0.34850657, w: -0.09999943} + distancesB: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + center: {x: -4.4624996, y: 3.1375, z: -4.4624996, w: 0.6375} + firstChild: 1145 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 1.1750002, y: 1.1750003, z: 1.1750002, w: 1.1750003} + center: {x: -4.4624996, y: 3.1375, z: -3.1874998, w: 0.6375} + firstChild: 1153 + - distancesA: {x: -0.34850657, y: -0.09999943, z: -0.35207498, w: -0.11180276} + distancesB: {x: -0.09999943, y: 1.1750003, z: -0.11180276, w: 1.1760637} + center: {x: -4.4624996, y: 4.4125, z: -4.4624996, w: 0.6375} + firstChild: 1161 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + distancesB: {x: 1.1750002, y: 1.1750003, z: 1.1760635, w: 1.1760637} + center: {x: -4.4624996, y: 4.4125, z: -3.1874998, w: 0.6375} + firstChild: 1169 + - distancesA: {x: -0.09999943, y: 1.1750002, z: -0.09999943, w: 1.1750002} + distancesB: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + center: {x: -3.1874998, y: 3.1375, z: -4.4624996, w: 0.6375} + firstChild: 1177 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 1.1750002, y: 2.4500003, z: 1.1750002, w: 2.4500003} + center: {x: -3.1874998, y: 3.1375, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 1.1750002, z: -0.11180276, w: 1.1760635} + distancesB: {x: -0.09999943, y: 1.1750003, z: -0.11180276, w: 1.1760637} + center: {x: -3.1874998, y: 4.4125, z: -4.4624996, w: 0.6375} + firstChild: 1185 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + distancesB: {x: 1.1750002, y: 2.4500003, z: 1.1760635, w: 2.4505103} + center: {x: -3.1874998, y: 4.4125, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 1.1750003, y: 1.1750003, z: 1.1750003, w: 1.1750003} + center: {x: -4.4624996, y: 3.1375, z: -1.9124999, w: 0.6375} + firstChild: 1193 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 1.1750003, y: 1.1750003, z: 1.1750003, w: 1.1750003} + center: {x: -4.4624996, y: 3.1375, z: -0.6375, w: 0.6375} + firstChild: 1201 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + distancesB: {x: 1.1750003, y: 1.1750003, z: 1.1760637, w: 1.1760637} + center: {x: -4.4624996, y: 4.4125, z: -1.9124999, w: 0.6375} + firstChild: 1209 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + distancesB: {x: 1.1750003, y: 1.1750003, z: 1.1760637, w: 1.1760637} + center: {x: -4.4624996, y: 4.4125, z: -0.6375, w: 0.6375} + firstChild: 1217 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 2.45, y: 2.4500003, z: 2.45, w: 2.4500003} + center: {x: -3.1874998, y: 3.1375, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 2.4500003, y: 2.4500003, z: 2.4500003, w: 2.4500003} + center: {x: -3.1874998, y: 3.1375, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + distancesB: {x: 2.45, y: 2.4500003, z: 2.4505103, w: 2.4505103} + center: {x: -3.1874998, y: 4.4125, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + distancesB: {x: 2.4500003, y: 2.4500003, z: 2.4505103, w: 2.4505103} + center: {x: -3.1874998, y: 4.4125, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.3520751, y: -0.11180318, z: -1.3700666, w: -1.3287684} + distancesB: {x: -0.11180318, y: 1.1760638, z: -1.3287684, w: 1.7709466} + center: {x: -4.4624996, y: 5.6875005, z: -4.4624996, w: 0.6375} + firstChild: 1225 + - distancesA: {x: -0.11180318, y: -0.11180318, z: -1.3287684, w: -1.3287684} + distancesB: {x: 1.1760635, y: 1.1760638, z: 1.7709464, w: 1.7709466} + center: {x: -4.4624996, y: 5.6875005, z: -3.1874998, w: 0.6375} + firstChild: 1233 + - distancesA: {x: -1.3700666, y: -1.3287684, z: -2.6232529, w: -2.601922} + distancesB: {x: -1.3287684, y: 1.7709466, z: -2.601922, w: 2.8531778} + center: {x: -4.4624996, y: 6.9625, z: -4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3287684, y: -1.3287684, z: -2.601922, w: -2.601922} + distancesB: {x: 1.7709464, y: 1.7709466, z: 2.8531778, w: 2.8531778} + center: {x: -4.4624996, y: 6.9625, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.11180318, y: 1.1760635, z: -1.3287684, w: 1.7709464} + distancesB: {x: -0.11180318, y: 1.1760638, z: -1.3287684, w: 1.7709466} + center: {x: -3.1874998, y: 5.6875005, z: -4.4624996, w: 0.6375} + firstChild: 1241 + - distancesA: {x: 1.1760635, y: 1.1760635, z: 1.7709464, w: 1.7709464} + distancesB: {x: 1.1760635, y: 2.4505103, z: 1.7709464, w: 2.7853415} + center: {x: -3.1874998, y: 5.6875005, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3287684, y: 1.7709464, z: -2.601922, w: 2.8531778} + distancesB: {x: -1.3287684, y: 1.7709466, z: -2.601922, w: 2.8531778} + center: {x: -3.1874998, y: 6.9625, z: -4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.7709464, y: 1.7709464, z: 2.8531778, w: 2.8531778} + distancesB: {x: 1.7709464, y: 2.7853415, z: 2.8531778, w: 3.5724645} + center: {x: -3.1874998, y: 6.9625, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.11180318, y: -0.11180318, z: -1.3287684, w: -1.3287684} + distancesB: {x: 1.1760638, y: 1.1760638, z: 1.7709466, w: 1.7709466} + center: {x: -4.4624996, y: 5.6875005, z: -1.9124999, w: 0.6375} + firstChild: 1249 + - distancesA: {x: -0.11180318, y: -0.11180318, z: -1.3287684, w: -1.3287684} + distancesB: {x: 1.1760638, y: 1.1760638, z: 1.7709466, w: 1.7709466} + center: {x: -4.4624996, y: 5.6875005, z: -0.6375, w: 0.6375} + firstChild: 1257 + - distancesA: {x: -1.3287684, y: -1.3287684, z: -2.601922, w: -2.601922} + distancesB: {x: 1.7709466, y: 1.7709466, z: 2.8531778, w: 2.8531778} + center: {x: -4.4624996, y: 6.9625, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3287684, y: -1.3287684, z: -2.601922, w: -2.601922} + distancesB: {x: 1.7709466, y: 1.7709466, z: 2.8531778, w: 2.8531778} + center: {x: -4.4624996, y: 6.9625, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 1.1760635, z: 1.7709464, w: 1.7709464} + distancesB: {x: 2.4505103, y: 2.4505103, z: 2.7853413, w: 2.7853415} + center: {x: -3.1874998, y: 5.6875005, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 1.1760635, z: 1.7709464, w: 1.7709464} + distancesB: {x: 2.4505103, y: 2.4505103, z: 2.7853415, w: 2.7853415} + center: {x: -3.1874998, y: 5.6875005, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.7709464, y: 1.7709464, z: 2.8531778, w: 2.8531778} + distancesB: {x: 2.7853413, y: 2.7853415, z: 3.572464, w: 3.5724645} + center: {x: -3.1874998, y: 6.9625, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.7709464, y: 1.7709464, z: 2.8531778, w: 2.8531778} + distancesB: {x: 2.7853415, y: 2.7853415, z: 3.5724645, w: 3.5724645} + center: {x: -3.1874998, y: 6.9625, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + distancesB: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + center: {x: -1.9124999, y: 3.1375, z: -4.4624996, w: 0.6375} + firstChild: 1265 + - distancesA: {x: 1.1750002, y: 2.45, z: 1.1750002, w: 2.45} + distancesB: {x: 1.1750002, y: 2.4500003, z: 1.1750002, w: 2.4500003} + center: {x: -1.9124999, y: 3.1375, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 1.1750003, z: -0.11180276, w: 1.1760637} + distancesB: {x: -0.09999943, y: 1.1750003, z: -0.11180276, w: 1.1760637} + center: {x: -1.9124999, y: 4.4125, z: -4.4624996, w: 0.6375} + firstChild: 1273 + - distancesA: {x: 1.1750002, y: 2.45, z: 1.1760635, w: 2.4505103} + distancesB: {x: 1.1750002, y: 2.4500003, z: 1.1760635, w: 2.4505103} + center: {x: -1.9124999, y: 4.4125, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + distancesB: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + center: {x: -0.6375, y: 3.1375, z: -4.4624996, w: 0.6375} + firstChild: 1281 + - distancesA: {x: 1.1750002, y: 2.4500003, z: 1.1750002, w: 2.4500003} + distancesB: {x: 1.1750002, y: 2.4500003, z: 1.1750002, w: 2.4500003} + center: {x: -0.6375, y: 3.1375, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 1.1750003, z: -0.11180276, w: 1.1760637} + distancesB: {x: -0.09999943, y: 1.1750003, z: -0.11180276, w: 1.1760637} + center: {x: -0.6375, y: 4.4125, z: -4.4624996, w: 0.6375} + firstChild: 1289 + - distancesA: {x: 1.1750002, y: 2.4500003, z: 1.1760635, w: 2.4505103} + distancesB: {x: 1.1750002, y: 2.4500003, z: 1.1760635, w: 2.4505103} + center: {x: -0.6375, y: 4.4125, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.11180318, y: 1.1760638, z: -1.3287684, w: 1.7709466} + distancesB: {x: -0.11180318, y: 1.1760638, z: -1.3287684, w: 1.7709466} + center: {x: -1.9124999, y: 5.6875005, z: -4.4624996, w: 0.6375} + firstChild: 1297 + - distancesA: {x: 1.1760635, y: 2.4505103, z: 1.7709464, w: 2.7853413} + distancesB: {x: 1.1760635, y: 2.4505103, z: 1.7709464, w: 2.7853415} + center: {x: -1.9124999, y: 5.6875005, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3287684, y: 1.7709466, z: -2.601922, w: 2.8531778} + distancesB: {x: -1.3287684, y: 1.7709466, z: -2.601922, w: 2.8531778} + center: {x: -1.9124999, y: 6.9625, z: -4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.7709464, y: 2.7853413, z: 2.8531778, w: 3.572464} + distancesB: {x: 1.7709464, y: 2.7853415, z: 2.8531778, w: 3.5724645} + center: {x: -1.9124999, y: 6.9625, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.11180318, y: 1.1760638, z: -1.3287684, w: 1.7709466} + distancesB: {x: -0.11180318, y: 1.1760638, z: -1.3287684, w: 1.7709466} + center: {x: -0.6375, y: 5.6875005, z: -4.4624996, w: 0.6375} + firstChild: 1305 + - distancesA: {x: 1.1760635, y: 2.4505103, z: 1.7709464, w: 2.7853415} + distancesB: {x: 1.1760635, y: 2.4505103, z: 1.7709464, w: 2.7853415} + center: {x: -0.6375, y: 5.6875005, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3287684, y: 1.7709466, z: -2.601922, w: 2.8531778} + distancesB: {x: -1.3287684, y: 1.7709466, z: -2.601922, w: 2.8531778} + center: {x: -0.6375, y: 6.9625, z: -4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.7709464, y: 2.7853415, z: 2.8531778, w: 3.5724645} + distancesB: {x: 1.7709464, y: 2.7853415, z: 2.8531778, w: 3.5724645} + center: {x: -0.6375, y: 6.9625, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 1.1750003, y: 1.1750003, z: 1.1750003, w: 1.1750003} + center: {x: -4.4624996, y: 3.1375, z: 0.6375, w: 0.6375} + firstChild: 1313 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 1.1750003, y: 1.1750003, z: 1.1750003, w: 1.1750003} + center: {x: -4.4624996, y: 3.1375, z: 1.9124999, w: 0.6375} + firstChild: 1321 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + distancesB: {x: 1.1750003, y: 1.1750003, z: 1.1760637, w: 1.1760637} + center: {x: -4.4624996, y: 4.4125, z: 0.6375, w: 0.6375} + firstChild: 1329 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + distancesB: {x: 1.1750003, y: 1.1750003, z: 1.1760637, w: 1.1760637} + center: {x: -4.4624996, y: 4.4125, z: 1.9124999, w: 0.6375} + firstChild: 1337 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 2.4500003, y: 2.4500003, z: 2.4500003, w: 2.4500003} + center: {x: -3.1874998, y: 3.1375, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 2.4500003, y: 2.45, z: 2.4500003, w: 2.45} + center: {x: -3.1874998, y: 3.1375, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + distancesB: {x: 2.4500003, y: 2.4500003, z: 2.4505103, w: 2.4505103} + center: {x: -3.1874998, y: 4.4125, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + distancesB: {x: 2.4500003, y: 2.45, z: 2.4505103, w: 2.4505103} + center: {x: -3.1874998, y: 4.4125, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 1.1750003, y: 1.1750002, z: 1.1750003, w: 1.1750002} + center: {x: -4.4624996, y: 3.1375, z: 3.1874998, w: 0.6375} + firstChild: 1345 + - distancesA: {x: -0.09999943, y: -0.34850657, z: -0.09999943, w: -0.34850657} + distancesB: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + center: {x: -4.4624996, y: 3.1375, z: 4.4624996, w: 0.6375} + firstChild: 1353 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + distancesB: {x: 1.1750003, y: 1.1750002, z: 1.1760637, w: 1.1760635} + center: {x: -4.4624996, y: 4.4125, z: 3.1874998, w: 0.6375} + firstChild: 1361 + - distancesA: {x: -0.09999943, y: -0.34850657, z: -0.11180276, w: -0.35207498} + distancesB: {x: 1.1750003, y: -0.09999943, z: 1.1760637, w: -0.11180276} + center: {x: -4.4624996, y: 4.4125, z: 4.4624996, w: 0.6375} + firstChild: 1369 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 2.4500003, y: 1.1750002, z: 2.4500003, w: 1.1750002} + center: {x: -3.1874998, y: 3.1375, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750002, y: -0.09999943, z: 1.1750002, w: -0.09999943} + distancesB: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + center: {x: -3.1874998, y: 3.1375, z: 4.4624996, w: 0.6375} + firstChild: 1377 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + distancesB: {x: 2.4500003, y: 1.1750002, z: 2.4505103, w: 1.1760635} + center: {x: -3.1874998, y: 4.4125, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750002, y: -0.09999943, z: 1.1760635, w: -0.11180276} + distancesB: {x: 1.1750003, y: -0.09999943, z: 1.1760637, w: -0.11180276} + center: {x: -3.1874998, y: 4.4125, z: 4.4624996, w: 0.6375} + firstChild: 1385 + - distancesA: {x: -0.11180318, y: -0.11180318, z: -1.3287684, w: -1.3287684} + distancesB: {x: 1.1760638, y: 1.1760638, z: 1.7709466, w: 1.7709466} + center: {x: -4.4624996, y: 5.6875005, z: 0.6375, w: 0.6375} + firstChild: 1393 + - distancesA: {x: -0.11180318, y: -0.11180318, z: -1.3287684, w: -1.3287684} + distancesB: {x: 1.1760638, y: 1.1760638, z: 1.7709466, w: 1.7709466} + center: {x: -4.4624996, y: 5.6875005, z: 1.9124999, w: 0.6375} + firstChild: 1401 + - distancesA: {x: -1.3287684, y: -1.3287684, z: -2.601922, w: -2.601922} + distancesB: {x: 1.7709466, y: 1.7709466, z: 2.8531778, w: 2.8531778} + center: {x: -4.4624996, y: 6.9625, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3287684, y: -1.3287684, z: -2.601922, w: -2.601922} + distancesB: {x: 1.7709466, y: 1.7709466, z: 2.8531778, w: 2.8531778} + center: {x: -4.4624996, y: 6.9625, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 1.1760635, z: 1.7709464, w: 1.7709464} + distancesB: {x: 2.4505103, y: 2.4505103, z: 2.7853415, w: 2.7853415} + center: {x: -3.1874998, y: 5.6875005, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 1.1760635, z: 1.7709464, w: 1.7709464} + distancesB: {x: 2.4505103, y: 2.4505103, z: 2.7853415, w: 2.7853413} + center: {x: -3.1874998, y: 5.6875005, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.7709464, y: 1.7709464, z: 2.8531778, w: 2.8531778} + distancesB: {x: 2.7853415, y: 2.7853415, z: 3.5724645, w: 3.5724645} + center: {x: -3.1874998, y: 6.9625, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.7709464, y: 1.7709464, z: 2.8531778, w: 2.8531778} + distancesB: {x: 2.7853415, y: 2.7853413, z: 3.5724645, w: 3.572464} + center: {x: -3.1874998, y: 6.9625, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.11180318, y: -0.11180318, z: -1.3287684, w: -1.3287684} + distancesB: {x: 1.1760638, y: 1.1760635, z: 1.7709466, w: 1.7709464} + center: {x: -4.4624996, y: 5.6875005, z: 3.1874998, w: 0.6375} + firstChild: 1409 + - distancesA: {x: -0.11180318, y: -0.3520751, z: -1.3287684, w: -1.3700666} + distancesB: {x: 1.1760638, y: -0.11180318, z: 1.7709466, w: -1.3287684} + center: {x: -4.4624996, y: 5.6875005, z: 4.4624996, w: 0.6375} + firstChild: 1417 + - distancesA: {x: -1.3287684, y: -1.3287684, z: -2.601922, w: -2.601922} + distancesB: {x: 1.7709466, y: 1.7709464, z: 2.8531778, w: 2.8531778} + center: {x: -4.4624996, y: 6.9625, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3287684, y: -1.3700666, z: -2.601922, w: -2.6232529} + distancesB: {x: 1.7709466, y: -1.3287684, z: 2.8531778, w: -2.601922} + center: {x: -4.4624996, y: 6.9625, z: 4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 1.1760635, z: 1.7709464, w: 1.7709464} + distancesB: {x: 2.4505103, y: 1.1760635, z: 2.7853415, w: 1.7709464} + center: {x: -3.1874998, y: 5.6875005, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1760635, y: -0.11180318, z: 1.7709464, w: -1.3287684} + distancesB: {x: 1.1760638, y: -0.11180318, z: 1.7709466, w: -1.3287684} + center: {x: -3.1874998, y: 5.6875005, z: 4.4624996, w: 0.6375} + firstChild: 1425 + - distancesA: {x: 1.7709464, y: 1.7709464, z: 2.8531778, w: 2.8531778} + distancesB: {x: 2.7853415, y: 1.7709464, z: 3.5724645, w: 2.8531778} + center: {x: -3.1874998, y: 6.9625, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.7709464, y: -1.3287684, z: 2.8531778, w: -2.601922} + distancesB: {x: 1.7709466, y: -1.3287684, z: 2.8531778, w: -2.601922} + center: {x: -3.1874998, y: 6.9625, z: 4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: 2.45, y: 1.1750002, z: 2.45, w: 1.1750002} + distancesB: {x: 2.4500003, y: 1.1750002, z: 2.4500003, w: 1.1750002} + center: {x: -1.9124999, y: 3.1375, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + distancesB: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + center: {x: -1.9124999, y: 3.1375, z: 4.4624996, w: 0.6375} + firstChild: 1433 + - distancesA: {x: 2.45, y: 1.1750002, z: 2.4505103, w: 1.1760635} + distancesB: {x: 2.4500003, y: 1.1750002, z: 2.4505103, w: 1.1760635} + center: {x: -1.9124999, y: 4.4125, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750003, y: -0.09999943, z: 1.1760637, w: -0.11180276} + distancesB: {x: 1.1750003, y: -0.09999943, z: 1.1760637, w: -0.11180276} + center: {x: -1.9124999, y: 4.4125, z: 4.4624996, w: 0.6375} + firstChild: 1441 + - distancesA: {x: 2.4500003, y: 1.1750002, z: 2.4500003, w: 1.1750002} + distancesB: {x: 2.4500003, y: 1.1750002, z: 2.4500003, w: 1.1750002} + center: {x: -0.6375, y: 3.1375, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + distancesB: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + center: {x: -0.6375, y: 3.1375, z: 4.4624996, w: 0.6375} + firstChild: 1449 + - distancesA: {x: 2.4500003, y: 1.1750002, z: 2.4505103, w: 1.1760635} + distancesB: {x: 2.4500003, y: 1.1750002, z: 2.4505103, w: 1.1760635} + center: {x: -0.6375, y: 4.4125, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750003, y: -0.09999943, z: 1.1760637, w: -0.11180276} + distancesB: {x: 1.1750003, y: -0.09999943, z: 1.1760637, w: -0.11180276} + center: {x: -0.6375, y: 4.4125, z: 4.4624996, w: 0.6375} + firstChild: 1457 + - distancesA: {x: 2.4505103, y: 1.1760635, z: 2.7853413, w: 1.7709464} + distancesB: {x: 2.4505103, y: 1.1760635, z: 2.7853415, w: 1.7709464} + center: {x: -1.9124999, y: 5.6875005, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1760638, y: -0.11180318, z: 1.7709466, w: -1.3287684} + distancesB: {x: 1.1760638, y: -0.11180318, z: 1.7709466, w: -1.3287684} + center: {x: -1.9124999, y: 5.6875005, z: 4.4624996, w: 0.6375} + firstChild: 1465 + - distancesA: {x: 2.7853413, y: 1.7709464, z: 3.572464, w: 2.8531778} + distancesB: {x: 2.7853415, y: 1.7709464, z: 3.5724645, w: 2.8531778} + center: {x: -1.9124999, y: 6.9625, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.7709466, y: -1.3287684, z: 2.8531778, w: -2.601922} + distancesB: {x: 1.7709466, y: -1.3287684, z: 2.8531778, w: -2.601922} + center: {x: -1.9124999, y: 6.9625, z: 4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: 2.4505103, y: 1.1760635, z: 2.7853415, w: 1.7709464} + distancesB: {x: 2.4505103, y: 1.1760635, z: 2.7853415, w: 1.7709464} + center: {x: -0.6375, y: 5.6875005, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1760638, y: -0.11180318, z: 1.7709466, w: -1.3287684} + distancesB: {x: 1.1760638, y: -0.11180318, z: 1.7709466, w: -1.3287684} + center: {x: -0.6375, y: 5.6875005, z: 4.4624996, w: 0.6375} + firstChild: 1473 + - distancesA: {x: 2.7853415, y: 1.7709464, z: 3.5724645, w: 2.8531778} + distancesB: {x: 2.7853415, y: 1.7709464, z: 3.5724645, w: 2.8531778} + center: {x: -0.6375, y: 6.9625, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.7709466, y: -1.3287684, z: 2.8531778, w: -2.601922} + distancesB: {x: 1.7709466, y: -1.3287684, z: 2.8531778, w: -2.601922} + center: {x: -0.6375, y: 6.9625, z: 4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6575296, y: -2.6, z: -1.4229816, w: -1.3249998} + distancesB: {x: -2.6575296, y: -2.6, z: -1.4229819, w: -1.3249998} + center: {x: 0.6375, y: -1.9624999, z: -4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: 0.6375, y: -1.9624999, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.4229816, y: -1.3249999, z: -0.31510916, w: -0.049999956} + distancesB: {x: -1.422982, y: -1.3249999, z: -0.31510916, w: -0.049999956} + center: {x: 0.6375, y: -0.68749994, z: -4.4624996, w: 0.6375} + firstChild: 1481 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: 0.6375, y: -0.68749994, z: -3.1874998, w: 0.6375} + firstChild: 1489 + - distancesA: {x: -2.6575296, y: -2.6, z: -1.422982, w: -1.3249998} + distancesB: {x: -2.6575296, y: -2.6, z: -1.4229816, w: -1.3249998} + center: {x: 1.9124999, y: -1.9624999, z: -4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: 1.9124999, y: -1.9624999, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.422982, y: -1.3249999, z: -0.31510916, w: -0.049999956} + distancesB: {x: -1.4229816, y: -1.3249999, z: -0.31510916, w: -0.049999956} + center: {x: 1.9124999, y: -0.68749994, z: -4.4624996, w: 0.6375} + firstChild: 1497 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: 1.9124999, y: -0.68749994, z: -3.1874998, w: 0.6375} + firstChild: 1505 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: 0.6375, y: -1.9624999, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: 0.6375, y: -1.9624999, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: 0.6375, y: -0.68749994, z: -1.9124999, w: 0.6375} + firstChild: 1513 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: 0.6375, y: -0.68749994, z: -0.6375, w: 0.6375} + firstChild: 1521 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: 1.9124999, y: -1.9624999, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: 1.9124999, y: -1.9624999, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: 1.9124999, y: -0.68749994, z: -1.9124999, w: 0.6375} + firstChild: 1529 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: 1.9124999, y: -0.68749994, z: -0.6375, w: 0.6375} + firstChild: 1537 + - distancesA: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 1.1750003} + distancesB: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 1.1750003} + center: {x: 0.6375, y: 0.58750004, z: -4.4624996, w: 0.6375} + firstChild: 1545 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.225} + center: {x: 0.6375, y: 0.58750004, z: -3.1874998, w: 0.6375} + firstChild: 1553 + - distancesA: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + distancesB: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + center: {x: 0.6375, y: 1.8625, z: -4.4624996, w: 0.6375} + firstChild: 1561 + - distancesA: {x: 1.1750002, y: 1.2249999, z: 1.1750002, w: 2.4500003} + distancesB: {x: 1.1750002, y: 1.2249999, z: 1.1750002, w: 2.4500003} + center: {x: 0.6375, y: 1.8625, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 1.1750003} + distancesB: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 1.1750003} + center: {x: 1.9124999, y: 0.58750004, z: -4.4624996, w: 0.6375} + firstChild: 1569 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.225} + center: {x: 1.9124999, y: 0.58750004, z: -3.1874998, w: 0.6375} + firstChild: 1577 + - distancesA: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + distancesB: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + center: {x: 1.9124999, y: 1.8625, z: -4.4624996, w: 0.6375} + firstChild: 1585 + - distancesA: {x: 1.1750002, y: 1.2249999, z: 1.1750002, w: 2.4500003} + distancesB: {x: 1.1750002, y: 1.2249999, z: 1.1750002, w: 2.45} + center: {x: 1.9124999, y: 1.8625, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + center: {x: 0.6375, y: 0.58750004, z: -1.9124999, w: 0.6375} + firstChild: 1593 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + center: {x: 0.6375, y: 0.58750004, z: -0.6375, w: 0.6375} + firstChild: 1601 + - distancesA: {x: 1.2249999, y: 1.2249999, z: 2.45, w: 2.5} + distancesB: {x: 1.2249999, y: 1.2249999, z: 2.45, w: 2.5} + center: {x: 0.6375, y: 1.8625, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.2249999, y: 1.2249999, z: 2.5, w: 2.5} + distancesB: {x: 1.2249999, y: 1.2249999, z: 2.5, w: 2.5} + center: {x: 0.6375, y: 1.8625, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + center: {x: 1.9124999, y: 0.58750004, z: -1.9124999, w: 0.6375} + firstChild: 1609 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + center: {x: 1.9124999, y: 0.58750004, z: -0.6375, w: 0.6375} + firstChild: 1617 + - distancesA: {x: 1.2249999, y: 1.2249999, z: 2.45, w: 2.5} + distancesB: {x: 1.2249999, y: 1.2249999, z: 2.45, w: 2.45} + center: {x: 1.9124999, y: 1.8625, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.2249999, y: 1.2249999, z: 2.5, w: 2.5} + distancesB: {x: 1.2249999, y: 1.2249999, z: 2.45, w: 2.45} + center: {x: 1.9124999, y: 1.8625, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6575296, y: -2.6, z: -1.4229816, w: -1.3249998} + distancesB: {x: -2.6575296, y: -2.6, z: -1.4229815, w: -1.3249998} + center: {x: 3.1874998, y: -1.9624999, z: -4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: 3.1874998, y: -1.9624999, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.4229819, y: -1.3249999, z: -0.31510916, w: -0.049999956} + distancesB: {x: -1.4229816, y: -1.3249999, z: -0.31510916, w: -0.049999956} + center: {x: 3.1874998, y: -0.68749994, z: -4.4624996, w: 0.6375} + firstChild: 1625 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: 3.1874998, y: -0.68749994, z: -3.1874998, w: 0.6375} + firstChild: 1633 + - distancesA: {x: -2.6575296, y: -2.6, z: -1.4229815, w: -1.3249998} + distancesB: {x: -2.7140434, y: -2.6575296, z: -1.5167223, w: -1.4229891} + center: {x: 4.4624996, y: -1.9624999, z: -4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6575296, y: -2.6575296, z: -1.4229838, w: -1.422986} + center: {x: 4.4624996, y: -1.9624999, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.4229816, y: -1.3249999, z: -0.31510916, w: -0.049999956} + distancesB: {x: -1.5167226, y: -1.4229892, z: -0.51686233, w: -0.31510916} + center: {x: 4.4624996, y: -0.68749994, z: -4.4624996, w: 0.6375} + firstChild: 1641 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.4229839, y: -1.422986, z: -0.31510916, w: -0.31510916} + center: {x: 4.4624996, y: -0.68749994, z: -3.1874998, w: 0.6375} + firstChild: 1649 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: 3.1874998, y: -1.9624999, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: 3.1874998, y: -1.9624999, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: 3.1874998, y: -0.68749994, z: -1.9124999, w: 0.6375} + firstChild: 1657 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: 3.1874998, y: -0.68749994, z: -0.6375, w: 0.6375} + firstChild: 1665 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6575296, y: -2.6575296, z: -1.422986, w: -1.422982} + center: {x: 4.4624996, y: -1.9624999, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6575296, y: -2.6575296, z: -1.422982, w: -1.4229816} + center: {x: 4.4624996, y: -1.9624999, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.422986, y: -1.422982, z: -0.31510916, w: -0.3151088} + center: {x: 4.4624996, y: -0.68749994, z: -1.9124999, w: 0.6375} + firstChild: 1673 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.422982, y: -1.4229816, z: -0.3151088, w: -0.31510916} + center: {x: 4.4624996, y: -0.68749994, z: -0.6375, w: 0.6375} + firstChild: 1681 + - distancesA: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 1.1750003} + distancesB: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 1.1750002} + center: {x: 3.1874998, y: 0.58750004, z: -4.4624996, w: 0.6375} + firstChild: 1689 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.1750002} + center: {x: 3.1874998, y: 0.58750004, z: -3.1874998, w: 0.6375} + firstChild: 1697 + - distancesA: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + distancesB: {x: -0.09999943, y: 1.1750002, z: -0.09999943, w: 1.1750002} + center: {x: 3.1874998, y: 1.8625, z: -4.4624996, w: 0.6375} + firstChild: 1705 + - distancesA: {x: 1.1750002, y: 1.2249999, z: 1.1750002, w: 2.4500003} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: 3.1874998, y: 1.8625, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 1.1750003} + distancesB: {x: -0.51686233, y: -0.31510916, z: -0.34850657, w: -0.09999943} + center: {x: 4.4624996, y: 0.58750004, z: -4.4624996, w: 0.6375} + firstChild: 1713 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.1750003} + distancesB: {x: -0.31510916, y: -0.31510916, z: -0.09999943, w: -0.09999943} + center: {x: 4.4624996, y: 0.58750004, z: -3.1874998, w: 0.6375} + firstChild: 1721 + - distancesA: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + distancesB: {x: -0.34850657, y: -0.09999943, z: -0.34850657, w: -0.09999943} + center: {x: 4.4624996, y: 1.8625, z: -4.4624996, w: 0.6375} + firstChild: 1729 + - distancesA: {x: 1.1750002, y: 1.1750003, z: 1.1750002, w: 1.1750003} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.4624996, y: 1.8625, z: -3.1874998, w: 0.6375} + firstChild: 1737 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.1750002} + center: {x: 3.1874998, y: 0.58750004, z: -1.9124999, w: 0.6375} + firstChild: 1745 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.1750002} + center: {x: 3.1874998, y: 0.58750004, z: -0.6375, w: 0.6375} + firstChild: 1753 + - distancesA: {x: 1.2249999, y: 1.2249999, z: 2.45, w: 2.4500003} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: 3.1874998, y: 1.8625, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.2249999, y: 1.2249999, z: 2.4500003, w: 2.4500003} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: 3.1874998, y: 1.8625, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.1750003, w: 1.1750003} + distancesB: {x: -0.31510916, y: -0.3151088, z: -0.09999943, w: -0.09999943} + center: {x: 4.4624996, y: 0.58750004, z: -1.9124999, w: 0.6375} + firstChild: 1761 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.1750003, w: 1.1750003} + distancesB: {x: -0.3151088, y: -0.31510916, z: -0.09999943, w: -0.09999943} + center: {x: 4.4624996, y: 0.58750004, z: -0.6375, w: 0.6375} + firstChild: 1769 + - distancesA: {x: 1.1750003, y: 1.1750003, z: 1.1750003, w: 1.1750003} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.4624996, y: 1.8625, z: -1.9124999, w: 0.6375} + firstChild: 1777 + - distancesA: {x: 1.1750003, y: 1.1750003, z: 1.1750003, w: 1.1750003} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.4624996, y: 1.8625, z: -0.6375, w: 0.6375} + firstChild: 1785 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: 0.6375, y: -1.9624999, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: 0.6375, y: -1.9624999, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: 0.6375, y: -0.68749994, z: 0.6375, w: 0.6375} + firstChild: 1793 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: 0.6375, y: -0.68749994, z: 1.9124999, w: 0.6375} + firstChild: 1801 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: 1.9124999, y: -1.9624999, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: 1.9124999, y: -1.9624999, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: 1.9124999, y: -0.68749994, z: 0.6375, w: 0.6375} + firstChild: 1809 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: 1.9124999, y: -0.68749994, z: 1.9124999, w: 0.6375} + firstChild: 1817 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: 0.6375, y: -1.9624999, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6575296, z: -1.3249998, w: -1.4229816} + distancesB: {x: -2.6, y: -2.6575296, z: -1.3249998, w: -1.4229815} + center: {x: 0.6375, y: -1.9624999, z: 4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: 0.6375, y: -0.68749994, z: 3.1874998, w: 0.6375} + firstChild: 1825 + - distancesA: {x: -1.3249999, y: -1.4229817, z: -0.049999956, w: -0.31510922} + distancesB: {x: -1.3249999, y: -1.4229816, z: -0.049999956, w: -0.315111} + center: {x: 0.6375, y: -0.68749994, z: 4.4624996, w: 0.6375} + firstChild: 1833 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: 1.9124999, y: -1.9624999, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6575296, z: -1.3249998, w: -1.4229815} + distancesB: {x: -2.6, y: -2.6575296, z: -1.3249998, w: -1.4229815} + center: {x: 1.9124999, y: -1.9624999, z: 4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: 1.9124999, y: -0.68749994, z: 3.1874998, w: 0.6375} + firstChild: 1841 + - distancesA: {x: -1.3249999, y: -1.4229816, z: -0.049999956, w: -0.315111} + distancesB: {x: -1.3249999, y: -1.4229816, z: -0.049999956, w: -0.31511} + center: {x: 1.9124999, y: -0.68749994, z: 4.4624996, w: 0.6375} + firstChild: 1849 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + center: {x: 0.6375, y: 0.58750004, z: 0.6375, w: 0.6375} + firstChild: 1857 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + center: {x: 0.6375, y: 0.58750004, z: 1.9124999, w: 0.6375} + firstChild: 1865 + - distancesA: {x: 1.2249999, y: 1.2249999, z: 2.5, w: 2.5} + distancesB: {x: 1.2249999, y: 1.2249999, z: 2.5, w: 2.5} + center: {x: 0.6375, y: 1.8625, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.2249999, y: 1.2249999, z: 2.5, w: 2.45} + distancesB: {x: 1.2249999, y: 1.2249999, z: 2.5, w: 2.45} + center: {x: 0.6375, y: 1.8625, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + center: {x: 1.9124999, y: 0.58750004, z: 0.6375, w: 0.6375} + firstChild: 1873 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + center: {x: 1.9124999, y: 0.58750004, z: 1.9124999, w: 0.6375} + firstChild: 1881 + - distancesA: {x: 1.2249999, y: 1.2249999, z: 2.5, w: 2.5} + distancesB: {x: 1.2249999, y: 1.2249999, z: 2.45, w: 2.45} + center: {x: 1.9124999, y: 1.8625, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.2249999, y: 1.2249999, z: 2.5, w: 2.45} + distancesB: {x: 1.2249999, y: 1.2249999, z: 2.45, w: 2.45} + center: {x: 1.9124999, y: 1.8625, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.1750002} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.1750002} + center: {x: 0.6375, y: 0.58750004, z: 3.1874998, w: 0.6375} + firstChild: 1889 + - distancesA: {x: -0.049999956, y: -0.31510922, z: 1.1750003, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.315111, z: 1.1750003, w: -0.09999943} + center: {x: 0.6375, y: 0.58750004, z: 4.4624996, w: 0.6375} + firstChild: 1897 + - distancesA: {x: 1.2249999, y: 1.1750002, z: 2.4500003, w: 1.1750002} + distancesB: {x: 1.2249999, y: 1.1750002, z: 2.4500003, w: 1.1750002} + center: {x: 0.6375, y: 1.8625, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + distancesB: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + center: {x: 0.6375, y: 1.8625, z: 4.4624996, w: 0.6375} + firstChild: 1905 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.1750002} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.1750002} + center: {x: 1.9124999, y: 0.58750004, z: 3.1874998, w: 0.6375} + firstChild: 1913 + - distancesA: {x: -0.049999956, y: -0.315111, z: 1.1750003, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.31511, z: 1.1750003, w: -0.09999943} + center: {x: 1.9124999, y: 0.58750004, z: 4.4624996, w: 0.6375} + firstChild: 1921 + - distancesA: {x: 1.2249999, y: 1.1750002, z: 2.4500003, w: 1.1750002} + distancesB: {x: 1.2249999, y: 1.1750002, z: 2.45, w: 1.1750002} + center: {x: 1.9124999, y: 1.8625, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + distancesB: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + center: {x: 1.9124999, y: 1.8625, z: 4.4624996, w: 0.6375} + firstChild: 1929 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: 3.1874998, y: -1.9624999, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: 3.1874998, y: -1.9624999, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: 3.1874998, y: -0.68749994, z: 0.6375, w: 0.6375} + firstChild: 1937 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: 3.1874998, y: -0.68749994, z: 1.9124999, w: 0.6375} + firstChild: 1945 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6575296, y: -2.6575296, z: -1.4229816, w: -1.4229819} + center: {x: 4.4624996, y: -1.9624999, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6575296, y: -2.6575296, z: -1.422982, w: -1.4229816} + center: {x: 4.4624996, y: -1.9624999, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.4229816, y: -1.422982, z: -0.31510916, w: -0.31510916} + center: {x: 4.4624996, y: -0.68749994, z: 0.6375, w: 0.6375} + firstChild: 1953 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.422982, y: -1.4229816, z: -0.31510916, w: -0.31510916} + center: {x: 4.4624996, y: -0.68749994, z: 1.9124999, w: 0.6375} + firstChild: 1961 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + center: {x: 3.1874998, y: -1.9624999, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6575296, z: -1.3249998, w: -1.4229815} + distancesB: {x: -2.6, y: -2.6575296, z: -1.3249998, w: -1.4229816} + center: {x: 3.1874998, y: -1.9624999, z: 4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + center: {x: 3.1874998, y: -0.68749994, z: 3.1874998, w: 0.6375} + firstChild: 1969 + - distancesA: {x: -1.3249999, y: -1.4229816, z: -0.049999956, w: -0.3151098} + distancesB: {x: -1.3249999, y: -1.4229817, z: -0.049999956, w: -0.31510893} + center: {x: 3.1874998, y: -0.68749994, z: 4.4624996, w: 0.6375} + firstChild: 1977 + - distancesA: {x: -2.6, y: -2.6, z: -1.3249998, w: -1.3249998} + distancesB: {x: -2.6575296, y: -2.6575296, z: -1.4229816, w: -1.4229815} + center: {x: 4.4624996, y: -1.9624999, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -2.6, y: -2.6575296, z: -1.3249998, w: -1.4229816} + distancesB: {x: -2.6575296, y: -2.7140434, z: -1.4229815, w: -1.5167223} + center: {x: 4.4624996, y: -1.9624999, z: 4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -1.4229819, y: -1.4229816, z: -0.31510916, w: -0.31510916} + center: {x: 4.4624996, y: -0.68749994, z: 3.1874998, w: 0.6375} + firstChild: 1985 + - distancesA: {x: -1.3249999, y: -1.4229817, z: -0.049999956, w: -0.31510893} + distancesB: {x: -1.4229816, y: -1.5167226, z: -0.31510916, w: -0.51686233} + center: {x: 4.4624996, y: -0.68749994, z: 4.4624996, w: 0.6375} + firstChild: 1993 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.1750002} + center: {x: 3.1874998, y: 0.58750004, z: 0.6375, w: 0.6375} + firstChild: 2001 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.225} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.1750002} + center: {x: 3.1874998, y: 0.58750004, z: 1.9124999, w: 0.6375} + firstChild: 2009 + - distancesA: {x: 1.2249999, y: 1.2249999, z: 2.4500003, w: 2.4500003} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: 3.1874998, y: 1.8625, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.2249999, y: 1.2249999, z: 2.4500003, w: 2.45} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: 3.1874998, y: 1.8625, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.1750003, w: 1.1750003} + distancesB: {x: -0.31510916, y: -0.31510916, z: -0.09999943, w: -0.09999943} + center: {x: 4.4624996, y: 0.58750004, z: 0.6375, w: 0.6375} + firstChild: 2017 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.1750003, w: 1.1750003} + distancesB: {x: -0.31510916, y: -0.31510916, z: -0.09999943, w: -0.09999943} + center: {x: 4.4624996, y: 0.58750004, z: 1.9124999, w: 0.6375} + firstChild: 2025 + - distancesA: {x: 1.1750003, y: 1.1750003, z: 1.1750003, w: 1.1750003} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.4624996, y: 1.8625, z: 0.6375, w: 0.6375} + firstChild: 2033 + - distancesA: {x: 1.1750003, y: 1.1750003, z: 1.1750003, w: 1.1750003} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.4624996, y: 1.8625, z: 1.9124999, w: 0.6375} + firstChild: 2041 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.225, w: 1.1750002} + distancesB: {x: -0.049999956, y: -0.049999956, z: 1.1750002, w: 1.1750002} + center: {x: 3.1874998, y: 0.58750004, z: 3.1874998, w: 0.6375} + firstChild: 2049 + - distancesA: {x: -0.049999956, y: -0.3151098, z: 1.1750003, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.31510893, z: 1.1750002, w: -0.09999943} + center: {x: 3.1874998, y: 0.58750004, z: 4.4624996, w: 0.6375} + firstChild: 2057 + - distancesA: {x: 1.2249999, y: 1.1750002, z: 2.4500003, w: 1.1750002} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: 3.1874998, y: 1.8625, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + distancesB: {x: 1.1750002, y: -0.09999943, z: 1.1750002, w: -0.09999943} + center: {x: 3.1874998, y: 1.8625, z: 4.4624996, w: 0.6375} + firstChild: 2065 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 1.1750003, w: 1.1750002} + distancesB: {x: -0.31510916, y: -0.31510916, z: -0.09999943, w: -0.09999943} + center: {x: 4.4624996, y: 0.58750004, z: 3.1874998, w: 0.6375} + firstChild: 2073 + - distancesA: {x: -0.049999956, y: -0.31510893, z: 1.1750003, w: -0.09999943} + distancesB: {x: -0.31510916, y: -0.51686233, z: -0.09999943, w: -0.34850657} + center: {x: 4.4624996, y: 0.58750004, z: 4.4624996, w: 0.6375} + firstChild: 2081 + - distancesA: {x: 1.1750003, y: 1.1750002, z: 1.1750003, w: 1.1750002} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.4624996, y: 1.8625, z: 3.1874998, w: 0.6375} + firstChild: 2089 + - distancesA: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + distancesB: {x: -0.09999943, y: -0.34850657, z: -0.09999943, w: -0.34850657} + center: {x: 4.4624996, y: 1.8625, z: 4.4624996, w: 0.6375} + firstChild: 2097 + - distancesA: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + distancesB: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + center: {x: 0.6375, y: 3.1375, z: -4.4624996, w: 0.6375} + firstChild: 2105 + - distancesA: {x: 1.1750002, y: 2.4500003, z: 1.1750002, w: 2.4500003} + distancesB: {x: 1.1750002, y: 2.4500003, z: 1.1750002, w: 2.4500003} + center: {x: 0.6375, y: 3.1375, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 1.1750003, z: -0.11180276, w: 1.1760637} + distancesB: {x: -0.09999943, y: 1.1750003, z: -0.11180276, w: 1.1760637} + center: {x: 0.6375, y: 4.4125, z: -4.4624996, w: 0.6375} + firstChild: 2113 + - distancesA: {x: 1.1750002, y: 2.4500003, z: 1.1760635, w: 2.4505103} + distancesB: {x: 1.1750002, y: 2.4500003, z: 1.1760635, w: 2.4505103} + center: {x: 0.6375, y: 4.4125, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + distancesB: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + center: {x: 1.9124999, y: 3.1375, z: -4.4624996, w: 0.6375} + firstChild: 2121 + - distancesA: {x: 1.1750002, y: 2.4500003, z: 1.1750002, w: 2.4500003} + distancesB: {x: 1.1750002, y: 2.45, z: 1.1750002, w: 2.45} + center: {x: 1.9124999, y: 3.1375, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 1.1750003, z: -0.11180276, w: 1.1760637} + distancesB: {x: -0.09999943, y: 1.1750003, z: -0.11180276, w: 1.1760637} + center: {x: 1.9124999, y: 4.4125, z: -4.4624996, w: 0.6375} + firstChild: 2129 + - distancesA: {x: 1.1750002, y: 2.4500003, z: 1.1760635, w: 2.4505103} + distancesB: {x: 1.1750002, y: 2.45, z: 1.1760635, w: 2.4505103} + center: {x: 1.9124999, y: 4.4125, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.11180318, y: 1.1760638, z: -1.3287684, w: 1.7709466} + distancesB: {x: -0.11180318, y: 1.1760638, z: -1.3287684, w: 1.7709466} + center: {x: 0.6375, y: 5.6875005, z: -4.4624996, w: 0.6375} + firstChild: 2137 + - distancesA: {x: 1.1760635, y: 2.4505103, z: 1.7709464, w: 2.7853415} + distancesB: {x: 1.1760635, y: 2.4505103, z: 1.7709464, w: 2.7853415} + center: {x: 0.6375, y: 5.6875005, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3287684, y: 1.7709466, z: -2.601922, w: 2.8531778} + distancesB: {x: -1.3287684, y: 1.7709466, z: -2.601922, w: 2.8531778} + center: {x: 0.6375, y: 6.9625, z: -4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.7709464, y: 2.7853415, z: 2.8531778, w: 3.5724645} + distancesB: {x: 1.7709464, y: 2.7853415, z: 2.8531778, w: 3.5724645} + center: {x: 0.6375, y: 6.9625, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.11180318, y: 1.1760638, z: -1.3287684, w: 1.7709466} + distancesB: {x: -0.11180318, y: 1.1760638, z: -1.3287684, w: 1.7709466} + center: {x: 1.9124999, y: 5.6875005, z: -4.4624996, w: 0.6375} + firstChild: 2145 + - distancesA: {x: 1.1760635, y: 2.4505103, z: 1.7709464, w: 2.7853415} + distancesB: {x: 1.1760635, y: 2.4505103, z: 1.7709464, w: 2.7853413} + center: {x: 1.9124999, y: 5.6875005, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3287684, y: 1.7709466, z: -2.601922, w: 2.8531778} + distancesB: {x: -1.3287684, y: 1.7709466, z: -2.601922, w: 2.8531778} + center: {x: 1.9124999, y: 6.9625, z: -4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.7709464, y: 2.7853415, z: 2.8531778, w: 3.5724645} + distancesB: {x: 1.7709464, y: 2.7853413, z: 2.8531778, w: 3.572464} + center: {x: 1.9124999, y: 6.9625, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + distancesB: {x: -0.09999943, y: 1.1750002, z: -0.09999943, w: 1.1750002} + center: {x: 3.1874998, y: 3.1375, z: -4.4624996, w: 0.6375} + firstChild: 2153 + - distancesA: {x: 1.1750002, y: 2.4500003, z: 1.1750002, w: 2.4500003} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: 3.1874998, y: 3.1375, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 1.1750003, z: -0.11180276, w: 1.1760637} + distancesB: {x: -0.09999943, y: 1.1750002, z: -0.11180276, w: 1.1760635} + center: {x: 3.1874998, y: 4.4125, z: -4.4624996, w: 0.6375} + firstChild: 2161 + - distancesA: {x: 1.1750002, y: 2.4500003, z: 1.1760635, w: 2.4505103} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + center: {x: 3.1874998, y: 4.4125, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 1.1750003, z: -0.09999943, w: 1.1750003} + distancesB: {x: -0.34850657, y: -0.09999943, z: -0.34850657, w: -0.09999943} + center: {x: 4.4624996, y: 3.1375, z: -4.4624996, w: 0.6375} + firstChild: 2169 + - distancesA: {x: 1.1750002, y: 1.1750003, z: 1.1750002, w: 1.1750003} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.4624996, y: 3.1375, z: -3.1874998, w: 0.6375} + firstChild: 2177 + - distancesA: {x: -0.09999943, y: 1.1750003, z: -0.11180276, w: 1.1760637} + distancesB: {x: -0.34850657, y: -0.09999943, z: -0.35207498, w: -0.11180276} + center: {x: 4.4624996, y: 4.4125, z: -4.4624996, w: 0.6375} + firstChild: 2185 + - distancesA: {x: 1.1750002, y: 1.1750003, z: 1.1760635, w: 1.1760637} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + center: {x: 4.4624996, y: 4.4125, z: -3.1874998, w: 0.6375} + firstChild: 2193 + - distancesA: {x: 2.45, y: 2.4500003, z: 2.45, w: 2.4500003} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: 3.1874998, y: 3.1375, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 2.4500003, y: 2.4500003, z: 2.4500003, w: 2.4500003} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: 3.1874998, y: 3.1375, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 2.45, y: 2.4500003, z: 2.4505103, w: 2.4505103} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + center: {x: 3.1874998, y: 4.4125, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 2.4500003, y: 2.4500003, z: 2.4505103, w: 2.4505103} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + center: {x: 3.1874998, y: 4.4125, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750003, y: 1.1750003, z: 1.1750003, w: 1.1750003} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.4624996, y: 3.1375, z: -1.9124999, w: 0.6375} + firstChild: 2201 + - distancesA: {x: 1.1750003, y: 1.1750003, z: 1.1750003, w: 1.1750003} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.4624996, y: 3.1375, z: -0.6375, w: 0.6375} + firstChild: 2209 + - distancesA: {x: 1.1750003, y: 1.1750003, z: 1.1760637, w: 1.1760637} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + center: {x: 4.4624996, y: 4.4125, z: -1.9124999, w: 0.6375} + firstChild: 2217 + - distancesA: {x: 1.1750003, y: 1.1750003, z: 1.1760637, w: 1.1760637} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + center: {x: 4.4624996, y: 4.4125, z: -0.6375, w: 0.6375} + firstChild: 2225 + - distancesA: {x: -0.11180318, y: 1.1760638, z: -1.3287684, w: 1.7709466} + distancesB: {x: -0.11180318, y: 1.1760635, z: -1.3287684, w: 1.7709464} + center: {x: 3.1874998, y: 5.6875005, z: -4.4624996, w: 0.6375} + firstChild: 2233 + - distancesA: {x: 1.1760635, y: 2.4505103, z: 1.7709464, w: 2.7853415} + distancesB: {x: 1.1760635, y: 1.1760635, z: 1.7709464, w: 1.7709464} + center: {x: 3.1874998, y: 5.6875005, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.3287684, y: 1.7709466, z: -2.601922, w: 2.8531778} + distancesB: {x: -1.3287684, y: 1.7709464, z: -2.601922, w: 2.8531778} + center: {x: 3.1874998, y: 6.9625, z: -4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.7709464, y: 2.7853415, z: 2.8531778, w: 3.5724645} + distancesB: {x: 1.7709464, y: 1.7709464, z: 2.8531778, w: 2.8531778} + center: {x: 3.1874998, y: 6.9625, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: -0.11180318, y: 1.1760638, z: -1.3287684, w: 1.7709466} + distancesB: {x: -0.3520751, y: -0.11180318, z: -1.3700666, w: -1.3287684} + center: {x: 4.4624996, y: 5.6875005, z: -4.4624996, w: 0.6375} + firstChild: 2241 + - distancesA: {x: 1.1760635, y: 1.1760638, z: 1.7709464, w: 1.7709466} + distancesB: {x: -0.11180318, y: -0.11180318, z: -1.3287684, w: -1.3287684} + center: {x: 4.4624996, y: 5.6875005, z: -3.1874998, w: 0.6375} + firstChild: 2249 + - distancesA: {x: -1.3287684, y: 1.7709466, z: -2.601922, w: 2.8531778} + distancesB: {x: -1.3700666, y: -1.3287684, z: -2.6232529, w: -2.601922} + center: {x: 4.4624996, y: 6.9625, z: -4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.7709464, y: 1.7709466, z: 2.8531778, w: 2.8531778} + distancesB: {x: -1.3287684, y: -1.3287684, z: -2.601922, w: -2.601922} + center: {x: 4.4624996, y: 6.9625, z: -3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 2.4505103, y: 2.4505103, z: 2.7853413, w: 2.7853415} + distancesB: {x: 1.1760635, y: 1.1760635, z: 1.7709464, w: 1.7709464} + center: {x: 3.1874998, y: 5.6875005, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 2.4505103, y: 2.4505103, z: 2.7853415, w: 2.7853415} + distancesB: {x: 1.1760635, y: 1.1760635, z: 1.7709464, w: 1.7709464} + center: {x: 3.1874998, y: 5.6875005, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 2.7853413, y: 2.7853415, z: 3.572464, w: 3.5724645} + distancesB: {x: 1.7709464, y: 1.7709464, z: 2.8531778, w: 2.8531778} + center: {x: 3.1874998, y: 6.9625, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 2.7853415, y: 2.7853415, z: 3.5724645, w: 3.5724645} + distancesB: {x: 1.7709464, y: 1.7709464, z: 2.8531778, w: 2.8531778} + center: {x: 3.1874998, y: 6.9625, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1760638, y: 1.1760638, z: 1.7709466, w: 1.7709466} + distancesB: {x: -0.11180318, y: -0.11180318, z: -1.3287684, w: -1.3287684} + center: {x: 4.4624996, y: 5.6875005, z: -1.9124999, w: 0.6375} + firstChild: 2257 + - distancesA: {x: 1.1760638, y: 1.1760638, z: 1.7709466, w: 1.7709466} + distancesB: {x: -0.11180318, y: -0.11180318, z: -1.3287684, w: -1.3287684} + center: {x: 4.4624996, y: 5.6875005, z: -0.6375, w: 0.6375} + firstChild: 2265 + - distancesA: {x: 1.7709466, y: 1.7709466, z: 2.8531778, w: 2.8531778} + distancesB: {x: -1.3287684, y: -1.3287684, z: -2.601922, w: -2.601922} + center: {x: 4.4624996, y: 6.9625, z: -1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.7709466, y: 1.7709466, z: 2.8531778, w: 2.8531778} + distancesB: {x: -1.3287684, y: -1.3287684, z: -2.601922, w: -2.601922} + center: {x: 4.4624996, y: 6.9625, z: -0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 2.4500003, y: 1.1750002, z: 2.4500003, w: 1.1750002} + distancesB: {x: 2.4500003, y: 1.1750002, z: 2.4500003, w: 1.1750002} + center: {x: 0.6375, y: 3.1375, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + distancesB: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + center: {x: 0.6375, y: 3.1375, z: 4.4624996, w: 0.6375} + firstChild: 2273 + - distancesA: {x: 2.4500003, y: 1.1750002, z: 2.4505103, w: 1.1760635} + distancesB: {x: 2.4500003, y: 1.1750002, z: 2.4505103, w: 1.1760635} + center: {x: 0.6375, y: 4.4125, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750003, y: -0.09999943, z: 1.1760637, w: -0.11180276} + distancesB: {x: 1.1750003, y: -0.09999943, z: 1.1760637, w: -0.11180276} + center: {x: 0.6375, y: 4.4125, z: 4.4624996, w: 0.6375} + firstChild: 2281 + - distancesA: {x: 2.4500003, y: 1.1750002, z: 2.4500003, w: 1.1750002} + distancesB: {x: 2.45, y: 1.1750002, z: 2.45, w: 1.1750002} + center: {x: 1.9124999, y: 3.1375, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + distancesB: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + center: {x: 1.9124999, y: 3.1375, z: 4.4624996, w: 0.6375} + firstChild: 2289 + - distancesA: {x: 2.4500003, y: 1.1750002, z: 2.4505103, w: 1.1760635} + distancesB: {x: 2.45, y: 1.1750002, z: 2.4505103, w: 1.1760635} + center: {x: 1.9124999, y: 4.4125, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750003, y: -0.09999943, z: 1.1760637, w: -0.11180276} + distancesB: {x: 1.1750003, y: -0.09999943, z: 1.1760637, w: -0.11180276} + center: {x: 1.9124999, y: 4.4125, z: 4.4624996, w: 0.6375} + firstChild: 2297 + - distancesA: {x: 2.4505103, y: 1.1760635, z: 2.7853415, w: 1.7709464} + distancesB: {x: 2.4505103, y: 1.1760635, z: 2.7853415, w: 1.7709464} + center: {x: 0.6375, y: 5.6875005, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1760638, y: -0.11180318, z: 1.7709466, w: -1.3287684} + distancesB: {x: 1.1760638, y: -0.11180318, z: 1.7709466, w: -1.3287684} + center: {x: 0.6375, y: 5.6875005, z: 4.4624996, w: 0.6375} + firstChild: 2305 + - distancesA: {x: 2.7853415, y: 1.7709464, z: 3.5724645, w: 2.8531778} + distancesB: {x: 2.7853415, y: 1.7709464, z: 3.5724645, w: 2.8531778} + center: {x: 0.6375, y: 6.9625, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.7709466, y: -1.3287684, z: 2.8531778, w: -2.601922} + distancesB: {x: 1.7709466, y: -1.3287684, z: 2.8531778, w: -2.601922} + center: {x: 0.6375, y: 6.9625, z: 4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: 2.4505103, y: 1.1760635, z: 2.7853415, w: 1.7709464} + distancesB: {x: 2.4505103, y: 1.1760635, z: 2.7853413, w: 1.7709464} + center: {x: 1.9124999, y: 5.6875005, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1760638, y: -0.11180318, z: 1.7709466, w: -1.3287684} + distancesB: {x: 1.1760638, y: -0.11180318, z: 1.7709466, w: -1.3287684} + center: {x: 1.9124999, y: 5.6875005, z: 4.4624996, w: 0.6375} + firstChild: 2313 + - distancesA: {x: 2.7853415, y: 1.7709464, z: 3.5724645, w: 2.8531778} + distancesB: {x: 2.7853413, y: 1.7709464, z: 3.572464, w: 2.8531778} + center: {x: 1.9124999, y: 6.9625, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.7709466, y: -1.3287684, z: 2.8531778, w: -2.601922} + distancesB: {x: 1.7709466, y: -1.3287684, z: 2.8531778, w: -2.601922} + center: {x: 1.9124999, y: 6.9625, z: 4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: 2.4500003, y: 2.4500003, z: 2.4500003, w: 2.4500003} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: 3.1874998, y: 3.1375, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 2.4500003, y: 2.45, z: 2.4500003, w: 2.45} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: 3.1874998, y: 3.1375, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 2.4500003, y: 2.4500003, z: 2.4505103, w: 2.4505103} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + center: {x: 3.1874998, y: 4.4125, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 2.4500003, y: 2.45, z: 2.4505103, w: 2.4505103} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + center: {x: 3.1874998, y: 4.4125, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750003, y: 1.1750003, z: 1.1750003, w: 1.1750003} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.4624996, y: 3.1375, z: 0.6375, w: 0.6375} + firstChild: 2321 + - distancesA: {x: 1.1750003, y: 1.1750003, z: 1.1750003, w: 1.1750003} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.4624996, y: 3.1375, z: 1.9124999, w: 0.6375} + firstChild: 2329 + - distancesA: {x: 1.1750003, y: 1.1750003, z: 1.1760637, w: 1.1760637} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + center: {x: 4.4624996, y: 4.4125, z: 0.6375, w: 0.6375} + firstChild: 2337 + - distancesA: {x: 1.1750003, y: 1.1750003, z: 1.1760637, w: 1.1760637} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + center: {x: 4.4624996, y: 4.4125, z: 1.9124999, w: 0.6375} + firstChild: 2345 + - distancesA: {x: 2.4500003, y: 1.1750002, z: 2.4500003, w: 1.1750002} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: 3.1874998, y: 3.1375, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + distancesB: {x: 1.1750002, y: -0.09999943, z: 1.1750002, w: -0.09999943} + center: {x: 3.1874998, y: 3.1375, z: 4.4624996, w: 0.6375} + firstChild: 2353 + - distancesA: {x: 2.4500003, y: 1.1750002, z: 2.4505103, w: 1.1760635} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + center: {x: 3.1874998, y: 4.4125, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1750003, y: -0.09999943, z: 1.1760637, w: -0.11180276} + distancesB: {x: 1.1750002, y: -0.09999943, z: 1.1760635, w: -0.11180276} + center: {x: 3.1874998, y: 4.4125, z: 4.4624996, w: 0.6375} + firstChild: 2361 + - distancesA: {x: 1.1750003, y: 1.1750002, z: 1.1750003, w: 1.1750002} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.4624996, y: 3.1375, z: 3.1874998, w: 0.6375} + firstChild: 2369 + - distancesA: {x: 1.1750003, y: -0.09999943, z: 1.1750003, w: -0.09999943} + distancesB: {x: -0.09999943, y: -0.34850657, z: -0.09999943, w: -0.34850657} + center: {x: 4.4624996, y: 3.1375, z: 4.4624996, w: 0.6375} + firstChild: 2377 + - distancesA: {x: 1.1750003, y: 1.1750002, z: 1.1760637, w: 1.1760635} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + center: {x: 4.4624996, y: 4.4125, z: 3.1874998, w: 0.6375} + firstChild: 2385 + - distancesA: {x: 1.1750003, y: -0.09999943, z: 1.1760637, w: -0.11180276} + distancesB: {x: -0.09999943, y: -0.34850657, z: -0.11180276, w: -0.35207498} + center: {x: 4.4624996, y: 4.4125, z: 4.4624996, w: 0.6375} + firstChild: 2393 + - distancesA: {x: 2.4505103, y: 2.4505103, z: 2.7853415, w: 2.7853415} + distancesB: {x: 1.1760635, y: 1.1760635, z: 1.7709464, w: 1.7709464} + center: {x: 3.1874998, y: 5.6875005, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 2.4505103, y: 2.4505103, z: 2.7853415, w: 2.7853413} + distancesB: {x: 1.1760635, y: 1.1760635, z: 1.7709464, w: 1.7709464} + center: {x: 3.1874998, y: 5.6875005, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 2.7853415, y: 2.7853415, z: 3.5724645, w: 3.5724645} + distancesB: {x: 1.7709464, y: 1.7709464, z: 2.8531778, w: 2.8531778} + center: {x: 3.1874998, y: 6.9625, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 2.7853415, y: 2.7853413, z: 3.5724645, w: 3.572464} + distancesB: {x: 1.7709464, y: 1.7709464, z: 2.8531778, w: 2.8531778} + center: {x: 3.1874998, y: 6.9625, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1760638, y: 1.1760638, z: 1.7709466, w: 1.7709466} + distancesB: {x: -0.11180318, y: -0.11180318, z: -1.3287684, w: -1.3287684} + center: {x: 4.4624996, y: 5.6875005, z: 0.6375, w: 0.6375} + firstChild: 2401 + - distancesA: {x: 1.1760638, y: 1.1760638, z: 1.7709466, w: 1.7709466} + distancesB: {x: -0.11180318, y: -0.11180318, z: -1.3287684, w: -1.3287684} + center: {x: 4.4624996, y: 5.6875005, z: 1.9124999, w: 0.6375} + firstChild: 2409 + - distancesA: {x: 1.7709466, y: 1.7709466, z: 2.8531778, w: 2.8531778} + distancesB: {x: -1.3287684, y: -1.3287684, z: -2.601922, w: -2.601922} + center: {x: 4.4624996, y: 6.9625, z: 0.6375, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.7709466, y: 1.7709466, z: 2.8531778, w: 2.8531778} + distancesB: {x: -1.3287684, y: -1.3287684, z: -2.601922, w: -2.601922} + center: {x: 4.4624996, y: 6.9625, z: 1.9124999, w: 0.6375} + firstChild: -1 + - distancesA: {x: 2.4505103, y: 1.1760635, z: 2.7853415, w: 1.7709464} + distancesB: {x: 1.1760635, y: 1.1760635, z: 1.7709464, w: 1.7709464} + center: {x: 3.1874998, y: 5.6875005, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1760638, y: -0.11180318, z: 1.7709466, w: -1.3287684} + distancesB: {x: 1.1760635, y: -0.11180318, z: 1.7709464, w: -1.3287684} + center: {x: 3.1874998, y: 5.6875005, z: 4.4624996, w: 0.6375} + firstChild: 2417 + - distancesA: {x: 2.7853415, y: 1.7709464, z: 3.5724645, w: 2.8531778} + distancesB: {x: 1.7709464, y: 1.7709464, z: 2.8531778, w: 2.8531778} + center: {x: 3.1874998, y: 6.9625, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.7709466, y: -1.3287684, z: 2.8531778, w: -2.601922} + distancesB: {x: 1.7709464, y: -1.3287684, z: 2.8531778, w: -2.601922} + center: {x: 3.1874998, y: 6.9625, z: 4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.1760638, y: 1.1760635, z: 1.7709466, w: 1.7709464} + distancesB: {x: -0.11180318, y: -0.11180318, z: -1.3287684, w: -1.3287684} + center: {x: 4.4624996, y: 5.6875005, z: 3.1874998, w: 0.6375} + firstChild: 2425 + - distancesA: {x: 1.1760638, y: -0.11180318, z: 1.7709466, w: -1.3287684} + distancesB: {x: -0.11180318, y: -0.3520751, z: -1.3287684, w: -1.3700666} + center: {x: 4.4624996, y: 5.6875005, z: 4.4624996, w: 0.6375} + firstChild: 2433 + - distancesA: {x: 1.7709466, y: 1.7709464, z: 2.8531778, w: 2.8531778} + distancesB: {x: -1.3287684, y: -1.3287684, z: -2.601922, w: -2.601922} + center: {x: 4.4624996, y: 6.9625, z: 3.1874998, w: 0.6375} + firstChild: -1 + - distancesA: {x: 1.7709466, y: -1.3287684, z: 2.8531778, w: -2.601922} + distancesB: {x: -1.3287684, y: -1.3700666, z: -2.601922, w: -2.6232529} + center: {x: 4.4624996, y: 6.9625, z: 4.4624996, w: 0.6375} + firstChild: -1 + - distancesA: {x: -1.5167226, y: -1.4229829, z: -0.9615866, w: -0.83251137} + distancesB: {x: -1.422983, y: -1.3249999, z: -0.8325113, w: -0.6874999} + center: {x: -4.7812495, y: -1.0062499, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.4229829, y: -1.4229816, z: -0.83251137, w: -0.8325128} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.7812495, y: -1.0062499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.96158665, y: -0.8325115, z: -0.51686233, w: -0.31511512} + distancesB: {x: -0.8325113, y: -0.6874999, z: -0.31511536, w: -0.049999956} + center: {x: -4.7812495, y: -0.36874995, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.8325115, y: -0.8325129, z: -0.31511512, w: -0.31511882} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.7812495, y: -0.36874995, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.422983, y: -1.3249999, z: -0.8325113, w: -0.6874999} + distancesB: {x: -1.4229839, y: -1.3249999, z: -0.8325126, w: -0.6874999} + center: {x: -4.1437497, y: -1.0062499, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.1437497, y: -1.0062499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.8325113, y: -0.6874999, z: -0.31511536, w: -0.049999956} + distancesB: {x: -0.8325127, y: -0.6874999, z: -0.31510916, w: -0.049999956} + center: {x: -4.1437497, y: -0.36874995, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.1437497, y: -0.36874995, z: -4.1437497, w: 0.31875} + firstChild: 2441 + - distancesA: {x: -1.4229816, y: -1.4229816, z: -0.8325488, w: -0.8325144} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.7812495, y: -1.0062499, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.4229816, y: -1.4229817, z: -0.8325144, w: -0.83251643} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.7812495, y: -1.0062499, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.8325489, y: -0.8325145, z: -0.31514108, w: -0.31512374} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.7812495, y: -0.36874995, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.8325145, y: -0.8325165, z: -0.31512374, w: -0.31512922} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.7812495, y: -0.36874995, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.1437497, y: -1.0062499, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.1437497, y: -1.0062499, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.1437497, y: -0.36874995, z: -3.5062497, w: 0.31875} + firstChild: 2449 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.1437497, y: -0.36874995, z: -2.8687499, w: 0.31875} + firstChild: 2457 + - distancesA: {x: -1.4229892, y: -1.3249999, z: -0.8325489, w: -0.6874999} + distancesB: {x: -1.4229848, y: -1.3249999, z: -0.83251446, w: -0.6874999} + center: {x: -3.5062497, y: -1.0062499, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -3.5062497, y: -1.0062499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.832549, y: -0.6874999, z: -0.31510916, w: -0.049999956} + distancesB: {x: -0.8325144, y: -0.6874999, z: -0.31510916, w: -0.049999956} + center: {x: -3.5062497, y: -0.36874995, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -3.5062497, y: -0.36874995, z: -4.1437497, w: 0.31875} + firstChild: 2465 + - distancesA: {x: -1.4229848, y: -1.3249999, z: -0.83251446, w: -0.6874999} + distancesB: {x: -1.422986, y: -1.3249999, z: -0.83250904, w: -0.6874999} + center: {x: -2.8687499, y: -1.0062499, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.8687499, y: -1.0062499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.8325144, y: -0.6874999, z: -0.31510916, w: -0.049999956} + distancesB: {x: -0.83250904, y: -0.6874999, z: -0.31510916, w: -0.049999956} + center: {x: -2.8687499, y: -0.36874995, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.8687499, y: -0.36874995, z: -4.1437497, w: 0.31875} + firstChild: 2473 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -3.5062497, y: -1.0062499, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -3.5062497, y: -1.0062499, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -3.5062497, y: -0.36874995, z: -3.5062497, w: 0.31875} + firstChild: 2481 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -3.5062497, y: -0.36874995, z: -2.8687499, w: 0.31875} + firstChild: 2489 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.8687499, y: -1.0062499, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.8687499, y: -1.0062499, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.8687499, y: -0.36874995, z: -3.5062497, w: 0.31875} + firstChild: 2497 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.8687499, y: -0.36874995, z: -2.8687499, w: 0.31875} + firstChild: 2505 + - distancesA: {x: -1.4229817, y: -1.4229816, z: -0.83251643, w: -0.8325104} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.7812495, y: -1.0062499, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.4229816, y: -1.4229816, z: -0.8325104, w: -0.8325096} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.7812495, y: -1.0062499, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.8325165, y: -0.83251053, z: -0.31512922, w: -0.3151131} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.7812495, y: -0.36874995, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.83251053, y: -0.83250964, z: -0.3151131, w: -0.315111} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.7812495, y: -0.36874995, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.1437497, y: -1.0062499, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.1437497, y: -1.0062499, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.1437497, y: -0.36874995, z: -2.2312498, w: 0.31875} + firstChild: 2513 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.1437497, y: -0.36874995, z: -1.5937499, w: 0.31875} + firstChild: 2521 + - distancesA: {x: -1.4229816, y: -1.4229817, z: -0.8325096, w: -0.83251214} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.7812495, y: -1.0062499, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.4229817, y: -1.4229817, z: -0.83251214, w: -0.8325089} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.7812495, y: -1.0062499, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.83250964, y: -0.83251214, z: -0.315111, w: -0.31511757} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.7812495, y: -0.36874995, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.83251214, y: -0.8325089, z: -0.31511757, w: -0.31510922} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.7812495, y: -0.36874995, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.1437497, y: -1.0062499, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.1437497, y: -1.0062499, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.1437497, y: -0.36874995, z: -0.95624995, w: 0.31875} + firstChild: 2529 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.1437497, y: -0.36874995, z: -0.31875, w: 0.31875} + firstChild: 2537 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -3.5062497, y: -1.0062499, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -3.5062497, y: -1.0062499, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -3.5062497, y: -0.36874995, z: -2.2312498, w: 0.31875} + firstChild: 2545 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -3.5062497, y: -0.36874995, z: -1.5937499, w: 0.31875} + firstChild: 2553 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.8687499, y: -1.0062499, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.8687499, y: -1.0062499, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.8687499, y: -0.36874995, z: -2.2312498, w: 0.31875} + firstChild: 2561 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.8687499, y: -0.36874995, z: -1.5937499, w: 0.31875} + firstChild: 2569 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -3.5062497, y: -1.0062499, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -3.5062497, y: -1.0062499, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -3.5062497, y: -0.36874995, z: -0.95624995, w: 0.31875} + firstChild: 2577 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -3.5062497, y: -0.36874995, z: -0.31875, w: 0.31875} + firstChild: 2585 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.8687499, y: -1.0062499, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.8687499, y: -1.0062499, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.8687499, y: -0.36874995, z: -0.95624995, w: 0.31875} + firstChild: 2593 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.8687499, y: -0.36874995, z: -0.31875, w: 0.31875} + firstChild: 2601 + - distancesA: {x: -0.51686233, y: -0.31511512, z: -0.34850657, w: -0.09999943} + distancesB: {x: -0.31511536, y: -0.049999956, z: -0.09999943, w: 0.5375004} + center: {x: -4.7812495, y: 0.26875004, z: -4.7812495, w: 0.31875} + firstChild: 2609 + - distancesA: {x: -0.31511512, y: -0.31511882, z: -0.09999943, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.26875004, z: -4.1437497, w: 0.31875} + firstChild: 2617 + - distancesA: {x: -0.34850657, y: -0.09999943, z: -0.34850657, w: -0.09999943} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -4.7812495, y: 0.90625, z: -4.7812495, w: 0.31875} + firstChild: 2625 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.90625, z: -4.1437497, w: 0.31875} + firstChild: 2633 + - distancesA: {x: -0.31511536, y: -0.049999956, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 0.5375004} + center: {x: -4.1437497, y: 0.26875004, z: -4.7812495, w: 0.31875} + firstChild: 2641 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + center: {x: -4.1437497, y: 0.26875004, z: -4.1437497, w: 0.31875} + firstChild: 2649 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -4.1437497, y: 0.90625, z: -4.7812495, w: 0.31875} + firstChild: 2657 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + center: {x: -4.1437497, y: 0.90625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.31514108, y: -0.31512374, z: -0.09999943, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.26875004, z: -3.5062497, w: 0.31875} + firstChild: 2665 + - distancesA: {x: -0.31512374, y: -0.31512922, z: -0.09999943, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.26875004, z: -2.8687499, w: 0.31875} + firstChild: 2673 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.90625, z: -3.5062497, w: 0.31875} + firstChild: 2681 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.90625, z: -2.8687499, w: 0.31875} + firstChild: 2689 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -4.1437497, y: 0.26875004, z: -3.5062497, w: 0.31875} + firstChild: 2697 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -4.1437497, y: 0.26875004, z: -2.8687499, w: 0.31875} + firstChild: 2705 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 0.90625, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 0.90625, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.34850657, y: -0.09999943, z: -0.34850657, w: -0.09999943} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -4.7812495, y: 1.5437499, z: -4.7812495, w: 0.31875} + firstChild: 2713 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 1.5437499, z: -4.1437497, w: 0.31875} + firstChild: 2721 + - distancesA: {x: -0.34850657, y: -0.09999943, z: -0.34850657, w: -0.09999943} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -4.7812495, y: 2.1812499, z: -4.7812495, w: 0.31875} + firstChild: 2729 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.1812499, z: -4.1437497, w: 0.31875} + firstChild: 2737 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -4.1437497, y: 1.5437499, z: -4.7812495, w: 0.31875} + firstChild: 2745 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -4.1437497, y: 1.5437499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -4.1437497, y: 2.1812499, z: -4.7812495, w: 0.31875} + firstChild: 2753 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -4.1437497, y: 2.1812499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 1.5437499, z: -3.5062497, w: 0.31875} + firstChild: 2761 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 1.5437499, z: -2.8687499, w: 0.31875} + firstChild: 2769 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.1812499, z: -3.5062497, w: 0.31875} + firstChild: 2777 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.1812499, z: -2.8687499, w: 0.31875} + firstChild: 2785 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 1.5437499, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 1.5437499, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.1812499, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.1812499, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 0.5375004} + center: {x: -3.5062497, y: 0.26875004, z: -4.7812495, w: 0.31875} + firstChild: 2793 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + center: {x: -3.5062497, y: 0.26875004, z: -4.1437497, w: 0.31875} + firstChild: 2801 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -3.5062497, y: 0.90625, z: -4.7812495, w: 0.31875} + firstChild: 2809 + - distancesA: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + center: {x: -3.5062497, y: 0.90625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 0.5375004} + center: {x: -2.8687499, y: 0.26875004, z: -4.7812495, w: 0.31875} + firstChild: 2817 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + center: {x: -2.8687499, y: 0.26875004, z: -4.1437497, w: 0.31875} + firstChild: 2825 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -2.8687499, y: 0.90625, z: -4.7812495, w: 0.31875} + firstChild: 2833 + - distancesA: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + center: {x: -2.8687499, y: 0.90625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -3.5062497, y: 0.26875004, z: -3.5062497, w: 0.31875} + firstChild: 2841 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -3.5062497, y: 0.26875004, z: -2.8687499, w: 0.31875} + firstChild: 2849 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.225} + center: {x: -3.5062497, y: 0.90625, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -3.5062497, y: 0.90625, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.8687499, y: 0.26875004, z: -3.5062497, w: 0.31875} + firstChild: 2857 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.8687499, y: 0.26875004, z: -2.8687499, w: 0.31875} + firstChild: 2865 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.225} + center: {x: -2.8687499, y: 0.90625, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -2.8687499, y: 0.90625, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -3.5062497, y: 1.5437499, z: -4.7812495, w: 0.31875} + firstChild: 2873 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -3.5062497, y: 1.5437499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -3.5062497, y: 2.1812499, z: -4.7812495, w: 0.31875} + firstChild: 2881 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -3.5062497, y: 2.1812499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -2.8687499, y: 1.5437499, z: -4.7812495, w: 0.31875} + firstChild: 2889 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -2.8687499, y: 1.5437499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -2.8687499, y: 2.1812499, z: -4.7812495, w: 0.31875} + firstChild: 2897 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -2.8687499, y: 2.1812499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.31512922, y: -0.3151131, z: -0.09999943, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.26875004, z: -2.2312498, w: 0.31875} + firstChild: 2905 + - distancesA: {x: -0.3151131, y: -0.315111, z: -0.09999943, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.26875004, z: -1.5937499, w: 0.31875} + firstChild: 2913 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.90625, z: -2.2312498, w: 0.31875} + firstChild: 2921 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.90625, z: -1.5937499, w: 0.31875} + firstChild: 2929 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -4.1437497, y: 0.26875004, z: -2.2312498, w: 0.31875} + firstChild: 2937 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -4.1437497, y: 0.26875004, z: -1.5937499, w: 0.31875} + firstChild: 2945 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 0.90625, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 0.90625, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.315111, y: -0.31511757, z: -0.09999943, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.26875004, z: -0.95624995, w: 0.31875} + firstChild: 2953 + - distancesA: {x: -0.31511757, y: -0.31510922, z: -0.09999943, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.26875004, z: -0.31875, w: 0.31875} + firstChild: 2961 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.90625, z: -0.95624995, w: 0.31875} + firstChild: 2969 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.90625, z: -0.31875, w: 0.31875} + firstChild: 2977 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -4.1437497, y: 0.26875004, z: -0.95624995, w: 0.31875} + firstChild: 2985 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -4.1437497, y: 0.26875004, z: -0.31875, w: 0.31875} + firstChild: 2993 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 0.90625, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 0.90625, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 1.5437499, z: -2.2312498, w: 0.31875} + firstChild: 3001 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 1.5437499, z: -1.5937499, w: 0.31875} + firstChild: 3009 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.1812499, z: -2.2312498, w: 0.31875} + firstChild: 3017 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.1812499, z: -1.5937499, w: 0.31875} + firstChild: 3025 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 1.5437499, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 1.5437499, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.1812499, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.1812499, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 1.5437499, z: -0.95624995, w: 0.31875} + firstChild: 3033 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 1.5437499, z: -0.31875, w: 0.31875} + firstChild: 3041 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.1812499, z: -0.95624995, w: 0.31875} + firstChild: 3049 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.1812499, z: -0.31875, w: 0.31875} + firstChild: 3057 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 1.5437499, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 1.5437499, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.1812499, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.1812499, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -3.5062497, y: 0.26875004, z: -2.2312498, w: 0.31875} + firstChild: 3065 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -3.5062497, y: 0.26875004, z: -1.5937499, w: 0.31875} + firstChild: 3073 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -3.5062497, y: 0.90625, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -3.5062497, y: 0.90625, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.8687499, y: 0.26875004, z: -2.2312498, w: 0.31875} + firstChild: 3081 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.8687499, y: 0.26875004, z: -1.5937499, w: 0.31875} + firstChild: 3089 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -2.8687499, y: 0.90625, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -2.8687499, y: 0.90625, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -3.5062497, y: 0.26875004, z: -0.95624995, w: 0.31875} + firstChild: 3097 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -3.5062497, y: 0.26875004, z: -0.31875, w: 0.31875} + firstChild: 3105 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -3.5062497, y: 0.90625, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -3.5062497, y: 0.90625, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.8687499, y: 0.26875004, z: -0.95624995, w: 0.31875} + firstChild: 3113 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.8687499, y: 0.26875004, z: -0.31875, w: 0.31875} + firstChild: 3121 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -2.8687499, y: 0.90625, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -2.8687499, y: 0.90625, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.422986, y: -1.3249999, z: -0.83250904, w: -0.6874999} + distancesB: {x: -1.4229826, y: -1.3249999, z: -0.83250886, w: -0.6874999} + center: {x: -2.2312498, y: -1.0062499, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.2312498, y: -1.0062499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.83250904, y: -0.6874999, z: -0.31510916, w: -0.049999956} + distancesB: {x: -0.8325089, y: -0.6874999, z: -0.31510878, w: -0.049999956} + center: {x: -2.2312498, y: -0.36874995, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.2312498, y: -0.36874995, z: -4.1437497, w: 0.31875} + firstChild: 3129 + - distancesA: {x: -1.4229826, y: -1.3249999, z: -0.83250886, w: -0.6874999} + distancesB: {x: -1.422982, y: -1.3249999, z: -0.83250904, w: -0.6874999} + center: {x: -1.5937499, y: -1.0062499, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -1.5937499, y: -1.0062499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.8325089, y: -0.6874999, z: -0.31510878, w: -0.049999956} + distancesB: {x: -0.83250904, y: -0.6874999, z: -0.3151088, w: -0.049999956} + center: {x: -1.5937499, y: -0.36874995, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -1.5937499, y: -0.36874995, z: -4.1437497, w: 0.31875} + firstChild: 3137 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.2312498, y: -1.0062499, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.2312498, y: -1.0062499, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.2312498, y: -0.36874995, z: -3.5062497, w: 0.31875} + firstChild: 3145 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.2312498, y: -0.36874995, z: -2.8687499, w: 0.31875} + firstChild: 3153 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -1.5937499, y: -1.0062499, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -1.5937499, y: -1.0062499, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -1.5937499, y: -0.36874995, z: -3.5062497, w: 0.31875} + firstChild: 3161 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -1.5937499, y: -0.36874995, z: -2.8687499, w: 0.31875} + firstChild: 3169 + - distancesA: {x: -1.422982, y: -1.3249999, z: -0.83250904, w: -0.6874999} + distancesB: {x: -1.4229835, y: -1.3249999, z: -0.83250886, w: -0.6874999} + center: {x: -0.95624995, y: -1.0062499, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.95624995, y: -1.0062499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.83250904, y: -0.6874999, z: -0.3151088, w: -0.049999956} + distancesB: {x: -0.8325089, y: -0.6874999, z: -0.3151088, w: -0.049999956} + center: {x: -0.95624995, y: -0.36874995, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.95624995, y: -0.36874995, z: -4.1437497, w: 0.31875} + firstChild: 3177 + - distancesA: {x: -1.4229835, y: -1.3249999, z: -0.83250886, w: -0.6874999} + distancesB: {x: -1.4229816, y: -1.3249999, z: -0.83250904, w: -0.6874999} + center: {x: -0.31875, y: -1.0062499, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.31875, y: -1.0062499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.8325089, y: -0.6874999, z: -0.3151088, w: -0.049999956} + distancesB: {x: -0.83250904, y: -0.6874999, z: -0.31510916, w: -0.049999956} + center: {x: -0.31875, y: -0.36874995, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.31875, y: -0.36874995, z: -4.1437497, w: 0.31875} + firstChild: 3185 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.95624995, y: -1.0062499, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.95624995, y: -1.0062499, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.95624995, y: -0.36874995, z: -3.5062497, w: 0.31875} + firstChild: 3193 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.95624995, y: -0.36874995, z: -2.8687499, w: 0.31875} + firstChild: 3201 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.31875, y: -1.0062499, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.31875, y: -1.0062499, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.31875, y: -0.36874995, z: -3.5062497, w: 0.31875} + firstChild: 3209 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.31875, y: -0.36874995, z: -2.8687499, w: 0.31875} + firstChild: 3217 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.2312498, y: -1.0062499, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.2312498, y: -1.0062499, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.2312498, y: -0.36874995, z: -2.2312498, w: 0.31875} + firstChild: 3225 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.2312498, y: -0.36874995, z: -1.5937499, w: 0.31875} + firstChild: 3233 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -1.5937499, y: -1.0062499, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -1.5937499, y: -1.0062499, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -1.5937499, y: -0.36874995, z: -2.2312498, w: 0.31875} + firstChild: 3241 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -1.5937499, y: -0.36874995, z: -1.5937499, w: 0.31875} + firstChild: 3249 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.2312498, y: -1.0062499, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.2312498, y: -1.0062499, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.2312498, y: -0.36874995, z: -0.95624995, w: 0.31875} + firstChild: 3257 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.2312498, y: -0.36874995, z: -0.31875, w: 0.31875} + firstChild: 3265 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -1.5937499, y: -1.0062499, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -1.5937499, y: -1.0062499, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -1.5937499, y: -0.36874995, z: -0.95624995, w: 0.31875} + firstChild: 3273 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -1.5937499, y: -0.36874995, z: -0.31875, w: 0.31875} + firstChild: 3281 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.95624995, y: -1.0062499, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.95624995, y: -1.0062499, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.95624995, y: -0.36874995, z: -2.2312498, w: 0.31875} + firstChild: 3289 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.95624995, y: -0.36874995, z: -1.5937499, w: 0.31875} + firstChild: 3297 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.31875, y: -1.0062499, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.31875, y: -1.0062499, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.31875, y: -0.36874995, z: -2.2312498, w: 0.31875} + firstChild: 3305 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.31875, y: -0.36874995, z: -1.5937499, w: 0.31875} + firstChild: 3313 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.95624995, y: -1.0062499, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.95624995, y: -1.0062499, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.95624995, y: -0.36874995, z: -0.95624995, w: 0.31875} + firstChild: 3321 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.95624995, y: -0.36874995, z: -0.31875, w: 0.31875} + firstChild: 3329 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.31875, y: -1.0062499, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.31875, y: -1.0062499, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.31875, y: -0.36874995, z: -0.95624995, w: 0.31875} + firstChild: 3337 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.31875, y: -0.36874995, z: -0.31875, w: 0.31875} + firstChild: 3345 + - distancesA: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.31510878, y: -0.049999956, z: -0.09999943, w: 0.5375004} + center: {x: -2.2312498, y: 0.26875004, z: -4.7812495, w: 0.31875} + firstChild: 3353 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + center: {x: -2.2312498, y: 0.26875004, z: -4.1437497, w: 0.31875} + firstChild: 3361 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -2.2312498, y: 0.90625, z: -4.7812495, w: 0.31875} + firstChild: 3369 + - distancesA: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + center: {x: -2.2312498, y: 0.90625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.31510878, y: -0.049999956, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.3151088, y: -0.049999956, z: -0.09999943, w: 0.5375004} + center: {x: -1.5937499, y: 0.26875004, z: -4.7812495, w: 0.31875} + firstChild: 3377 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + center: {x: -1.5937499, y: 0.26875004, z: -4.1437497, w: 0.31875} + firstChild: 3385 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -1.5937499, y: 0.90625, z: -4.7812495, w: 0.31875} + firstChild: 3393 + - distancesA: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + center: {x: -1.5937499, y: 0.90625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.2312498, y: 0.26875004, z: -3.5062497, w: 0.31875} + firstChild: 3401 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.2312498, y: 0.26875004, z: -2.8687499, w: 0.31875} + firstChild: 3409 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.225} + center: {x: -2.2312498, y: 0.90625, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -2.2312498, y: 0.90625, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -1.5937499, y: 0.26875004, z: -3.5062497, w: 0.31875} + firstChild: 3417 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -1.5937499, y: 0.26875004, z: -2.8687499, w: 0.31875} + firstChild: 3425 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.225} + center: {x: -1.5937499, y: 0.90625, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -1.5937499, y: 0.90625, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -2.2312498, y: 1.5437499, z: -4.7812495, w: 0.31875} + firstChild: 3433 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -2.2312498, y: 1.5437499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -2.2312498, y: 2.1812499, z: -4.7812495, w: 0.31875} + firstChild: 3441 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -2.2312498, y: 2.1812499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -1.5937499, y: 1.5437499, z: -4.7812495, w: 0.31875} + firstChild: 3449 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -1.5937499, y: 1.5437499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -1.5937499, y: 2.1812499, z: -4.7812495, w: 0.31875} + firstChild: 3457 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -1.5937499, y: 2.1812499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.3151088, y: -0.049999956, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.3151088, y: -0.049999956, z: -0.09999943, w: 0.5375004} + center: {x: -0.95624995, y: 0.26875004, z: -4.7812495, w: 0.31875} + firstChild: 3465 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + center: {x: -0.95624995, y: 0.26875004, z: -4.1437497, w: 0.31875} + firstChild: 3473 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -0.95624995, y: 0.90625, z: -4.7812495, w: 0.31875} + firstChild: 3481 + - distancesA: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + center: {x: -0.95624995, y: 0.90625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.3151088, y: -0.049999956, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 0.5375004} + center: {x: -0.31875, y: 0.26875004, z: -4.7812495, w: 0.31875} + firstChild: 3489 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + center: {x: -0.31875, y: 0.26875004, z: -4.1437497, w: 0.31875} + firstChild: 3497 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -0.31875, y: 0.90625, z: -4.7812495, w: 0.31875} + firstChild: 3505 + - distancesA: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + center: {x: -0.31875, y: 0.90625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.95624995, y: 0.26875004, z: -3.5062497, w: 0.31875} + firstChild: 3513 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.95624995, y: 0.26875004, z: -2.8687499, w: 0.31875} + firstChild: 3521 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.225} + center: {x: -0.95624995, y: 0.90625, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -0.95624995, y: 0.90625, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.31875, y: 0.26875004, z: -3.5062497, w: 0.31875} + firstChild: 3529 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.31875, y: 0.26875004, z: -2.8687499, w: 0.31875} + firstChild: 3537 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.225} + center: {x: -0.31875, y: 0.90625, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -0.31875, y: 0.90625, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -0.95624995, y: 1.5437499, z: -4.7812495, w: 0.31875} + firstChild: 3545 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -0.95624995, y: 1.5437499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -0.95624995, y: 2.1812499, z: -4.7812495, w: 0.31875} + firstChild: 3553 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -0.95624995, y: 2.1812499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -0.31875, y: 1.5437499, z: -4.7812495, w: 0.31875} + firstChild: 3561 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -0.31875, y: 1.5437499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -0.31875, y: 2.1812499, z: -4.7812495, w: 0.31875} + firstChild: 3569 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -0.31875, y: 2.1812499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.2312498, y: 0.26875004, z: -2.2312498, w: 0.31875} + firstChild: 3577 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.2312498, y: 0.26875004, z: -1.5937499, w: 0.31875} + firstChild: 3585 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -2.2312498, y: 0.90625, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -2.2312498, y: 0.90625, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -1.5937499, y: 0.26875004, z: -2.2312498, w: 0.31875} + firstChild: 3593 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -1.5937499, y: 0.26875004, z: -1.5937499, w: 0.31875} + firstChild: 3601 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -1.5937499, y: 0.90625, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -1.5937499, y: 0.90625, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.2312498, y: 0.26875004, z: -0.95624995, w: 0.31875} + firstChild: 3609 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.2312498, y: 0.26875004, z: -0.31875, w: 0.31875} + firstChild: 3617 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -2.2312498, y: 0.90625, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -2.2312498, y: 0.90625, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -1.5937499, y: 0.26875004, z: -0.95624995, w: 0.31875} + firstChild: 3625 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -1.5937499, y: 0.26875004, z: -0.31875, w: 0.31875} + firstChild: 3633 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -1.5937499, y: 0.90625, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -1.5937499, y: 0.90625, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.95624995, y: 0.26875004, z: -2.2312498, w: 0.31875} + firstChild: 3641 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.95624995, y: 0.26875004, z: -1.5937499, w: 0.31875} + firstChild: 3649 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -0.95624995, y: 0.90625, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -0.95624995, y: 0.90625, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.31875, y: 0.26875004, z: -2.2312498, w: 0.31875} + firstChild: 3657 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.31875, y: 0.26875004, z: -1.5937499, w: 0.31875} + firstChild: 3665 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -0.31875, y: 0.90625, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -0.31875, y: 0.90625, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.95624995, y: 0.26875004, z: -0.95624995, w: 0.31875} + firstChild: 3673 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.95624995, y: 0.26875004, z: -0.31875, w: 0.31875} + firstChild: 3681 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -0.95624995, y: 0.90625, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -0.95624995, y: 0.90625, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.31875, y: 0.26875004, z: -0.95624995, w: 0.31875} + firstChild: 3689 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.31875, y: 0.26875004, z: -0.31875, w: 0.31875} + firstChild: 3697 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -0.31875, y: 0.90625, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -0.31875, y: 0.90625, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.4229817, y: -1.4229816, z: -0.8325089, w: -0.8325091} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.7812495, y: -1.0062499, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.4229816, y: -1.4229816, z: -0.83250904, w: -0.8325097} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.7812495, y: -1.0062499, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.8325089, y: -0.83250916, z: -0.31510922, w: -0.31510964} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.7812495, y: -0.36874995, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.8325091, y: -0.83250976, z: -0.31510964, w: -0.315111} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.7812495, y: -0.36874995, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.1437497, y: -1.0062499, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.1437497, y: -1.0062499, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.1437497, y: -0.36874995, z: 0.31875, w: 0.31875} + firstChild: 3705 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.1437497, y: -0.36874995, z: 0.95624995, w: 0.31875} + firstChild: 3713 + - distancesA: {x: -1.4229816, y: -1.4229817, z: -0.83250964, w: -0.8325105} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.7812495, y: -1.0062499, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.4229817, y: -1.4229816, z: -0.8325105, w: -0.8325092} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.7812495, y: -1.0062499, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.8325097, y: -0.83251053, z: -0.315111, w: -0.3151132} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.7812495, y: -0.36874995, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.83251053, y: -0.8325093, z: -0.3151132, w: -0.3151098} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.7812495, y: -0.36874995, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.1437497, y: -1.0062499, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.1437497, y: -1.0062499, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.1437497, y: -0.36874995, z: 1.5937499, w: 0.31875} + firstChild: 3721 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.1437497, y: -0.36874995, z: 2.2312498, w: 0.31875} + firstChild: 3729 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -3.5062497, y: -1.0062499, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -3.5062497, y: -1.0062499, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -3.5062497, y: -0.36874995, z: 0.31875, w: 0.31875} + firstChild: 3737 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -3.5062497, y: -0.36874995, z: 0.95624995, w: 0.31875} + firstChild: 3745 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.8687499, y: -1.0062499, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.8687499, y: -1.0062499, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.8687499, y: -0.36874995, z: 0.31875, w: 0.31875} + firstChild: 3753 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.8687499, y: -0.36874995, z: 0.95624995, w: 0.31875} + firstChild: 3761 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -3.5062497, y: -1.0062499, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -3.5062497, y: -1.0062499, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -3.5062497, y: -0.36874995, z: 1.5937499, w: 0.31875} + firstChild: 3769 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -3.5062497, y: -0.36874995, z: 2.2312498, w: 0.31875} + firstChild: 3777 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.8687499, y: -1.0062499, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.8687499, y: -1.0062499, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.8687499, y: -0.36874995, z: 1.5937499, w: 0.31875} + firstChild: 3785 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.8687499, y: -0.36874995, z: 2.2312498, w: 0.31875} + firstChild: 3793 + - distancesA: {x: -1.4229816, y: -1.4229816, z: -0.8325092, w: -0.83250904} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.7812495, y: -1.0062499, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.4229816, y: -1.4229817, z: -0.83250904, w: -0.83250886} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.7812495, y: -1.0062499, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.8325093, y: -0.83250904, z: -0.31511, w: -0.31510964} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.7812495, y: -0.36874995, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.83250904, y: -0.8325089, z: -0.31510964, w: -0.31510893} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.7812495, y: -0.36874995, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.1437497, y: -1.0062499, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.1437497, y: -1.0062499, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.1437497, y: -0.36874995, z: 2.8687499, w: 0.31875} + firstChild: 3801 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.1437497, y: -0.36874995, z: 3.5062497, w: 0.31875} + firstChild: 3809 + - distancesA: {x: -1.4229817, y: -1.4229816, z: -0.83250886, w: -0.83250904} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.7812495, y: -1.0062499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.4229816, y: -1.5167226, z: -0.83250904, w: -0.9615866} + distancesB: {x: -1.3249999, y: -1.4229829, z: -0.6874999, w: -0.83251137} + center: {x: -4.7812495, y: -1.0062499, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.8325089, y: -0.83250904, z: -0.31510893, w: -0.31510916} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.7812495, y: -0.36874995, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.83250904, y: -0.96158665, z: -0.31510916, w: -0.51686233} + distancesB: {x: -0.6874999, y: -0.8325115, z: -0.049999956, w: -0.31511512} + center: {x: -4.7812495, y: -0.36874995, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -4.1437497, y: -1.0062499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.4229829, z: -0.6874999, w: -0.83251137} + distancesB: {x: -1.3249999, y: -1.4229816, z: -0.6874999, w: -0.8325128} + center: {x: -4.1437497, y: -1.0062499, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -4.1437497, y: -0.36874995, z: 4.1437497, w: 0.31875} + firstChild: 3817 + - distancesA: {x: -0.6874999, y: -0.8325115, z: -0.049999956, w: -0.31511512} + distancesB: {x: -0.6874999, y: -0.8325129, z: -0.049999956, w: -0.31511882} + center: {x: -4.1437497, y: -0.36874995, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -3.5062497, y: -1.0062499, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -3.5062497, y: -1.0062499, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -3.5062497, y: -0.36874995, z: 2.8687499, w: 0.31875} + firstChild: 3825 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -3.5062497, y: -0.36874995, z: 3.5062497, w: 0.31875} + firstChild: 3833 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.8687499, y: -1.0062499, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.8687499, y: -1.0062499, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.8687499, y: -0.36874995, z: 2.8687499, w: 0.31875} + firstChild: 3841 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.8687499, y: -0.36874995, z: 3.5062497, w: 0.31875} + firstChild: 3849 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -3.5062497, y: -1.0062499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.4229816, z: -0.6874999, w: -0.8325488} + distancesB: {x: -1.3249999, y: -1.4229816, z: -0.6874999, w: -0.8325144} + center: {x: -3.5062497, y: -1.0062499, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -3.5062497, y: -0.36874995, z: 4.1437497, w: 0.31875} + firstChild: 3857 + - distancesA: {x: -0.6874999, y: -0.8325489, z: -0.049999956, w: -0.31514108} + distancesB: {x: -0.6874999, y: -0.8325145, z: -0.049999956, w: -0.31512374} + center: {x: -3.5062497, y: -0.36874995, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.8687499, y: -1.0062499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.4229816, z: -0.6874999, w: -0.8325144} + distancesB: {x: -1.3249999, y: -1.4229817, z: -0.6874999, w: -0.83251643} + center: {x: -2.8687499, y: -1.0062499, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.8687499, y: -0.36874995, z: 4.1437497, w: 0.31875} + firstChild: 3865 + - distancesA: {x: -0.6874999, y: -0.8325145, z: -0.049999956, w: -0.31512374} + distancesB: {x: -0.6874999, y: -0.8325165, z: -0.049999956, w: -0.31512922} + center: {x: -2.8687499, y: -0.36874995, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.31510922, y: -0.31510964, z: -0.09999943, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.26875004, z: 0.31875, w: 0.31875} + firstChild: 3873 + - distancesA: {x: -0.31510964, y: -0.315111, z: -0.09999943, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.26875004, z: 0.95624995, w: 0.31875} + firstChild: 3881 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.90625, z: 0.31875, w: 0.31875} + firstChild: 3889 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.90625, z: 0.95624995, w: 0.31875} + firstChild: 3897 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -4.1437497, y: 0.26875004, z: 0.31875, w: 0.31875} + firstChild: 3905 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -4.1437497, y: 0.26875004, z: 0.95624995, w: 0.31875} + firstChild: 3913 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 0.90625, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 0.90625, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.315111, y: -0.3151132, z: -0.09999943, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.26875004, z: 1.5937499, w: 0.31875} + firstChild: 3921 + - distancesA: {x: -0.3151132, y: -0.3151098, z: -0.09999943, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.26875004, z: 2.2312498, w: 0.31875} + firstChild: 3929 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.90625, z: 1.5937499, w: 0.31875} + firstChild: 3937 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.90625, z: 2.2312498, w: 0.31875} + firstChild: 3945 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -4.1437497, y: 0.26875004, z: 1.5937499, w: 0.31875} + firstChild: 3953 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -4.1437497, y: 0.26875004, z: 2.2312498, w: 0.31875} + firstChild: 3961 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 0.90625, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 0.90625, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 1.5437499, z: 0.31875, w: 0.31875} + firstChild: 3969 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 1.5437499, z: 0.95624995, w: 0.31875} + firstChild: 3977 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.1812499, z: 0.31875, w: 0.31875} + firstChild: 3985 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.1812499, z: 0.95624995, w: 0.31875} + firstChild: 3993 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 1.5437499, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 1.5437499, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.1812499, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.1812499, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 1.5437499, z: 1.5937499, w: 0.31875} + firstChild: 4001 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 1.5437499, z: 2.2312498, w: 0.31875} + firstChild: 4009 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.1812499, z: 1.5937499, w: 0.31875} + firstChild: 4017 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.1812499, z: 2.2312498, w: 0.31875} + firstChild: 4025 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 1.5437499, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 1.5437499, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.1812499, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.1812499, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -3.5062497, y: 0.26875004, z: 0.31875, w: 0.31875} + firstChild: 4033 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -3.5062497, y: 0.26875004, z: 0.95624995, w: 0.31875} + firstChild: 4041 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -3.5062497, y: 0.90625, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -3.5062497, y: 0.90625, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.8687499, y: 0.26875004, z: 0.31875, w: 0.31875} + firstChild: 4049 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.8687499, y: 0.26875004, z: 0.95624995, w: 0.31875} + firstChild: 4057 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -2.8687499, y: 0.90625, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -2.8687499, y: 0.90625, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -3.5062497, y: 0.26875004, z: 1.5937499, w: 0.31875} + firstChild: 4065 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -3.5062497, y: 0.26875004, z: 2.2312498, w: 0.31875} + firstChild: 4073 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -3.5062497, y: 0.90625, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -3.5062497, y: 0.90625, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.8687499, y: 0.26875004, z: 1.5937499, w: 0.31875} + firstChild: 4081 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.8687499, y: 0.26875004, z: 2.2312498, w: 0.31875} + firstChild: 4089 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -2.8687499, y: 0.90625, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -2.8687499, y: 0.90625, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.31511, y: -0.31510964, z: -0.09999943, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.26875004, z: 2.8687499, w: 0.31875} + firstChild: 4097 + - distancesA: {x: -0.31510964, y: -0.31510893, z: -0.09999943, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.26875004, z: 3.5062497, w: 0.31875} + firstChild: 4105 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.90625, z: 2.8687499, w: 0.31875} + firstChild: 4113 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.90625, z: 3.5062497, w: 0.31875} + firstChild: 4121 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -4.1437497, y: 0.26875004, z: 2.8687499, w: 0.31875} + firstChild: 4129 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -4.1437497, y: 0.26875004, z: 3.5062497, w: 0.31875} + firstChild: 4137 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 0.90625, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 0.90625, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.31510893, y: -0.31510916, z: -0.09999943, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.26875004, z: 4.1437497, w: 0.31875} + firstChild: 4145 + - distancesA: {x: -0.31510916, y: -0.51686233, z: -0.09999943, w: -0.34850657} + distancesB: {x: -0.049999956, y: -0.31511512, z: 0.5375004, w: -0.09999943} + center: {x: -4.7812495, y: 0.26875004, z: 4.7812495, w: 0.31875} + firstChild: 4153 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 0.90625, z: 4.1437497, w: 0.31875} + firstChild: 4161 + - distancesA: {x: -0.09999943, y: -0.34850657, z: -0.09999943, w: -0.34850657} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -4.7812495, y: 0.90625, z: 4.7812495, w: 0.31875} + firstChild: 4169 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + center: {x: -4.1437497, y: 0.26875004, z: 4.1437497, w: 0.31875} + firstChild: 4177 + - distancesA: {x: -0.049999956, y: -0.31511512, z: 0.5375004, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.31511882, z: 0.5375004, w: -0.09999943} + center: {x: -4.1437497, y: 0.26875004, z: 4.7812495, w: 0.31875} + firstChild: 4185 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -4.1437497, y: 0.90625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -4.1437497, y: 0.90625, z: 4.7812495, w: 0.31875} + firstChild: 4193 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 1.5437499, z: 2.8687499, w: 0.31875} + firstChild: 4201 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 1.5437499, z: 3.5062497, w: 0.31875} + firstChild: 4209 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.1812499, z: 2.8687499, w: 0.31875} + firstChild: 4217 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.1812499, z: 3.5062497, w: 0.31875} + firstChild: 4225 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 1.5437499, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 1.5437499, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.1812499, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.1812499, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 1.5437499, z: 4.1437497, w: 0.31875} + firstChild: 4233 + - distancesA: {x: -0.09999943, y: -0.34850657, z: -0.09999943, w: -0.34850657} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -4.7812495, y: 1.5437499, z: 4.7812495, w: 0.31875} + firstChild: 4241 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.1812499, z: 4.1437497, w: 0.31875} + firstChild: 4249 + - distancesA: {x: -0.09999943, y: -0.34850657, z: -0.09999943, w: -0.34850657} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -4.7812495, y: 2.1812499, z: 4.7812495, w: 0.31875} + firstChild: 4257 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -4.1437497, y: 1.5437499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -4.1437497, y: 1.5437499, z: 4.7812495, w: 0.31875} + firstChild: 4265 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -4.1437497, y: 2.1812499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -4.1437497, y: 2.1812499, z: 4.7812495, w: 0.31875} + firstChild: 4273 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -3.5062497, y: 0.26875004, z: 2.8687499, w: 0.31875} + firstChild: 4281 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -3.5062497, y: 0.26875004, z: 3.5062497, w: 0.31875} + firstChild: 4289 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -3.5062497, y: 0.90625, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.1750003} + center: {x: -3.5062497, y: 0.90625, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.8687499, y: 0.26875004, z: 2.8687499, w: 0.31875} + firstChild: 4297 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.8687499, y: 0.26875004, z: 3.5062497, w: 0.31875} + firstChild: 4305 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -2.8687499, y: 0.90625, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.1750003} + center: {x: -2.8687499, y: 0.90625, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + center: {x: -3.5062497, y: 0.26875004, z: 4.1437497, w: 0.31875} + firstChild: 4313 + - distancesA: {x: -0.049999956, y: -0.31514108, z: 0.5375004, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.31512374, z: 0.5375004, w: -0.09999943} + center: {x: -3.5062497, y: 0.26875004, z: 4.7812495, w: 0.31875} + firstChild: 4321 + - distancesA: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -3.5062497, y: 0.90625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -3.5062497, y: 0.90625, z: 4.7812495, w: 0.31875} + firstChild: 4329 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + center: {x: -2.8687499, y: 0.26875004, z: 4.1437497, w: 0.31875} + firstChild: 4337 + - distancesA: {x: -0.049999956, y: -0.31512374, z: 0.5375004, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.31512922, z: 0.5375004, w: -0.09999943} + center: {x: -2.8687499, y: 0.26875004, z: 4.7812495, w: 0.31875} + firstChild: 4345 + - distancesA: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -2.8687499, y: 0.90625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -2.8687499, y: 0.90625, z: 4.7812495, w: 0.31875} + firstChild: 4353 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -3.5062497, y: 1.5437499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -3.5062497, y: 1.5437499, z: 4.7812495, w: 0.31875} + firstChild: 4361 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -3.5062497, y: 2.1812499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -3.5062497, y: 2.1812499, z: 4.7812495, w: 0.31875} + firstChild: 4369 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -2.8687499, y: 1.5437499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -2.8687499, y: 1.5437499, z: 4.7812495, w: 0.31875} + firstChild: 4377 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -2.8687499, y: 2.1812499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -2.8687499, y: 2.1812499, z: 4.7812495, w: 0.31875} + firstChild: 4385 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.2312498, y: -1.0062499, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.2312498, y: -1.0062499, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.2312498, y: -0.36874995, z: 0.31875, w: 0.31875} + firstChild: 4393 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.2312498, y: -0.36874995, z: 0.95624995, w: 0.31875} + firstChild: 4401 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -1.5937499, y: -1.0062499, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -1.5937499, y: -1.0062499, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -1.5937499, y: -0.36874995, z: 0.31875, w: 0.31875} + firstChild: 4409 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -1.5937499, y: -0.36874995, z: 0.95624995, w: 0.31875} + firstChild: 4417 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.2312498, y: -1.0062499, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.2312498, y: -1.0062499, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.2312498, y: -0.36874995, z: 1.5937499, w: 0.31875} + firstChild: 4425 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.2312498, y: -0.36874995, z: 2.2312498, w: 0.31875} + firstChild: 4433 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -1.5937499, y: -1.0062499, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -1.5937499, y: -1.0062499, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -1.5937499, y: -0.36874995, z: 1.5937499, w: 0.31875} + firstChild: 4441 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -1.5937499, y: -0.36874995, z: 2.2312498, w: 0.31875} + firstChild: 4449 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.95624995, y: -1.0062499, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.95624995, y: -1.0062499, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.95624995, y: -0.36874995, z: 0.31875, w: 0.31875} + firstChild: 4457 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.95624995, y: -0.36874995, z: 0.95624995, w: 0.31875} + firstChild: 4465 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.31875, y: -1.0062499, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.31875, y: -1.0062499, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.31875, y: -0.36874995, z: 0.31875, w: 0.31875} + firstChild: 4473 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.31875, y: -0.36874995, z: 0.95624995, w: 0.31875} + firstChild: 4481 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.95624995, y: -1.0062499, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.95624995, y: -1.0062499, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.95624995, y: -0.36874995, z: 1.5937499, w: 0.31875} + firstChild: 4489 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.95624995, y: -0.36874995, z: 2.2312498, w: 0.31875} + firstChild: 4497 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.31875, y: -1.0062499, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.31875, y: -1.0062499, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.31875, y: -0.36874995, z: 1.5937499, w: 0.31875} + firstChild: 4505 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.31875, y: -0.36874995, z: 2.2312498, w: 0.31875} + firstChild: 4513 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.2312498, y: -1.0062499, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.2312498, y: -1.0062499, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.2312498, y: -0.36874995, z: 2.8687499, w: 0.31875} + firstChild: 4521 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.2312498, y: -0.36874995, z: 3.5062497, w: 0.31875} + firstChild: 4529 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -1.5937499, y: -1.0062499, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -1.5937499, y: -1.0062499, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -1.5937499, y: -0.36874995, z: 2.8687499, w: 0.31875} + firstChild: 4537 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -1.5937499, y: -0.36874995, z: 3.5062497, w: 0.31875} + firstChild: 4545 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -2.2312498, y: -1.0062499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.4229817, z: -0.6874999, w: -0.83251643} + distancesB: {x: -1.3249999, y: -1.4229816, z: -0.6874999, w: -0.8325104} + center: {x: -2.2312498, y: -1.0062499, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -2.2312498, y: -0.36874995, z: 4.1437497, w: 0.31875} + firstChild: 4553 + - distancesA: {x: -0.6874999, y: -0.8325165, z: -0.049999956, w: -0.31512922} + distancesB: {x: -0.6874999, y: -0.83251053, z: -0.049999956, w: -0.3151131} + center: {x: -2.2312498, y: -0.36874995, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -1.5937499, y: -1.0062499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.4229816, z: -0.6874999, w: -0.8325104} + distancesB: {x: -1.3249999, y: -1.4229816, z: -0.6874999, w: -0.8325096} + center: {x: -1.5937499, y: -1.0062499, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -1.5937499, y: -0.36874995, z: 4.1437497, w: 0.31875} + firstChild: 4561 + - distancesA: {x: -0.6874999, y: -0.83251053, z: -0.049999956, w: -0.3151131} + distancesB: {x: -0.6874999, y: -0.83250964, z: -0.049999956, w: -0.315111} + center: {x: -1.5937499, y: -0.36874995, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.95624995, y: -1.0062499, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.95624995, y: -1.0062499, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.95624995, y: -0.36874995, z: 2.8687499, w: 0.31875} + firstChild: 4569 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.95624995, y: -0.36874995, z: 3.5062497, w: 0.31875} + firstChild: 4577 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.31875, y: -1.0062499, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.31875, y: -1.0062499, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.31875, y: -0.36874995, z: 2.8687499, w: 0.31875} + firstChild: 4585 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.31875, y: -0.36874995, z: 3.5062497, w: 0.31875} + firstChild: 4593 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.95624995, y: -1.0062499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.4229816, z: -0.6874999, w: -0.8325096} + distancesB: {x: -1.3249999, y: -1.4229817, z: -0.6874999, w: -0.83251214} + center: {x: -0.95624995, y: -1.0062499, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.95624995, y: -0.36874995, z: 4.1437497, w: 0.31875} + firstChild: 4601 + - distancesA: {x: -0.6874999, y: -0.83250964, z: -0.049999956, w: -0.315111} + distancesB: {x: -0.6874999, y: -0.83251214, z: -0.049999956, w: -0.31511757} + center: {x: -0.95624995, y: -0.36874995, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: -0.31875, y: -1.0062499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.4229817, z: -0.6874999, w: -0.83251214} + distancesB: {x: -1.3249999, y: -1.4229817, z: -0.6874999, w: -0.8325089} + center: {x: -0.31875, y: -1.0062499, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: -0.31875, y: -0.36874995, z: 4.1437497, w: 0.31875} + firstChild: 4609 + - distancesA: {x: -0.6874999, y: -0.83251214, z: -0.049999956, w: -0.31511757} + distancesB: {x: -0.6874999, y: -0.8325089, z: -0.049999956, w: -0.31510922} + center: {x: -0.31875, y: -0.36874995, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.2312498, y: 0.26875004, z: 0.31875, w: 0.31875} + firstChild: 4617 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.2312498, y: 0.26875004, z: 0.95624995, w: 0.31875} + firstChild: 4625 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -2.2312498, y: 0.90625, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -2.2312498, y: 0.90625, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -1.5937499, y: 0.26875004, z: 0.31875, w: 0.31875} + firstChild: 4633 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -1.5937499, y: 0.26875004, z: 0.95624995, w: 0.31875} + firstChild: 4641 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -1.5937499, y: 0.90625, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -1.5937499, y: 0.90625, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.2312498, y: 0.26875004, z: 1.5937499, w: 0.31875} + firstChild: 4649 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.2312498, y: 0.26875004, z: 2.2312498, w: 0.31875} + firstChild: 4657 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -2.2312498, y: 0.90625, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -2.2312498, y: 0.90625, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -1.5937499, y: 0.26875004, z: 1.5937499, w: 0.31875} + firstChild: 4665 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -1.5937499, y: 0.26875004, z: 2.2312498, w: 0.31875} + firstChild: 4673 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -1.5937499, y: 0.90625, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -1.5937499, y: 0.90625, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.95624995, y: 0.26875004, z: 0.31875, w: 0.31875} + firstChild: 4681 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.95624995, y: 0.26875004, z: 0.95624995, w: 0.31875} + firstChild: 4689 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -0.95624995, y: 0.90625, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -0.95624995, y: 0.90625, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.31875, y: 0.26875004, z: 0.31875, w: 0.31875} + firstChild: 4697 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.31875, y: 0.26875004, z: 0.95624995, w: 0.31875} + firstChild: 4705 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -0.31875, y: 0.90625, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -0.31875, y: 0.90625, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.95624995, y: 0.26875004, z: 1.5937499, w: 0.31875} + firstChild: 4713 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.95624995, y: 0.26875004, z: 2.2312498, w: 0.31875} + firstChild: 4721 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -0.95624995, y: 0.90625, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -0.95624995, y: 0.90625, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.31875, y: 0.26875004, z: 1.5937499, w: 0.31875} + firstChild: 4729 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.31875, y: 0.26875004, z: 2.2312498, w: 0.31875} + firstChild: 4737 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -0.31875, y: 0.90625, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -0.31875, y: 0.90625, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.2312498, y: 0.26875004, z: 2.8687499, w: 0.31875} + firstChild: 4745 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -2.2312498, y: 0.26875004, z: 3.5062497, w: 0.31875} + firstChild: 4753 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -2.2312498, y: 0.90625, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.1750003} + center: {x: -2.2312498, y: 0.90625, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -1.5937499, y: 0.26875004, z: 2.8687499, w: 0.31875} + firstChild: 4761 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -1.5937499, y: 0.26875004, z: 3.5062497, w: 0.31875} + firstChild: 4769 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -1.5937499, y: 0.90625, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.1750003} + center: {x: -1.5937499, y: 0.90625, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + center: {x: -2.2312498, y: 0.26875004, z: 4.1437497, w: 0.31875} + firstChild: 4777 + - distancesA: {x: -0.049999956, y: -0.31512922, z: 0.5375004, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.3151131, z: 0.5375004, w: -0.09999943} + center: {x: -2.2312498, y: 0.26875004, z: 4.7812495, w: 0.31875} + firstChild: 4785 + - distancesA: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -2.2312498, y: 0.90625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -2.2312498, y: 0.90625, z: 4.7812495, w: 0.31875} + firstChild: 4793 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + center: {x: -1.5937499, y: 0.26875004, z: 4.1437497, w: 0.31875} + firstChild: 4801 + - distancesA: {x: -0.049999956, y: -0.3151131, z: 0.5375004, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.315111, z: 0.5375004, w: -0.09999943} + center: {x: -1.5937499, y: 0.26875004, z: 4.7812495, w: 0.31875} + firstChild: 4809 + - distancesA: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -1.5937499, y: 0.90625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -1.5937499, y: 0.90625, z: 4.7812495, w: 0.31875} + firstChild: 4817 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -2.2312498, y: 1.5437499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -2.2312498, y: 1.5437499, z: 4.7812495, w: 0.31875} + firstChild: 4825 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -2.2312498, y: 2.1812499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -2.2312498, y: 2.1812499, z: 4.7812495, w: 0.31875} + firstChild: 4833 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -1.5937499, y: 1.5437499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -1.5937499, y: 1.5437499, z: 4.7812495, w: 0.31875} + firstChild: 4841 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -1.5937499, y: 2.1812499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -1.5937499, y: 2.1812499, z: 4.7812495, w: 0.31875} + firstChild: 4849 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.95624995, y: 0.26875004, z: 2.8687499, w: 0.31875} + firstChild: 4857 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.95624995, y: 0.26875004, z: 3.5062497, w: 0.31875} + firstChild: 4865 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -0.95624995, y: 0.90625, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.1750003} + center: {x: -0.95624995, y: 0.90625, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.31875, y: 0.26875004, z: 2.8687499, w: 0.31875} + firstChild: 4873 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: -0.31875, y: 0.26875004, z: 3.5062497, w: 0.31875} + firstChild: 4881 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: -0.31875, y: 0.90625, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.1750003} + center: {x: -0.31875, y: 0.90625, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + center: {x: -0.95624995, y: 0.26875004, z: 4.1437497, w: 0.31875} + firstChild: 4889 + - distancesA: {x: -0.049999956, y: -0.315111, z: 0.5375004, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.31511757, z: 0.5375004, w: -0.09999943} + center: {x: -0.95624995, y: 0.26875004, z: 4.7812495, w: 0.31875} + firstChild: 4897 + - distancesA: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -0.95624995, y: 0.90625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -0.95624995, y: 0.90625, z: 4.7812495, w: 0.31875} + firstChild: 4905 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + center: {x: -0.31875, y: 0.26875004, z: 4.1437497, w: 0.31875} + firstChild: 4913 + - distancesA: {x: -0.049999956, y: -0.31511757, z: 0.5375004, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.31510922, z: 0.5375004, w: -0.09999943} + center: {x: -0.31875, y: 0.26875004, z: 4.7812495, w: 0.31875} + firstChild: 4921 + - distancesA: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -0.31875, y: 0.90625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -0.31875, y: 0.90625, z: 4.7812495, w: 0.31875} + firstChild: 4929 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -0.95624995, y: 1.5437499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -0.95624995, y: 1.5437499, z: 4.7812495, w: 0.31875} + firstChild: 4937 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -0.95624995, y: 2.1812499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -0.95624995, y: 2.1812499, z: 4.7812495, w: 0.31875} + firstChild: 4945 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -0.31875, y: 1.5437499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -0.31875, y: 1.5437499, z: 4.7812495, w: 0.31875} + firstChild: 4953 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -0.31875, y: 2.1812499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -0.31875, y: 2.1812499, z: 4.7812495, w: 0.31875} + firstChild: 4961 + - distancesA: {x: -0.34850657, y: -0.09999943, z: -0.34850657, w: -0.09999943} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -4.7812495, y: 2.8187501, z: -4.7812495, w: 0.31875} + firstChild: 4969 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.8187501, z: -4.1437497, w: 0.31875} + firstChild: 4977 + - distancesA: {x: -0.34850657, y: -0.09999943, z: -0.34850657, w: -0.09999943} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -4.7812495, y: 3.45625, z: -4.7812495, w: 0.31875} + firstChild: 4985 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 3.45625, z: -4.1437497, w: 0.31875} + firstChild: 4993 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -4.1437497, y: 2.8187501, z: -4.7812495, w: 0.31875} + firstChild: 5001 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -4.1437497, y: 2.8187501, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -4.1437497, y: 3.45625, z: -4.7812495, w: 0.31875} + firstChild: 5009 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -4.1437497, y: 3.45625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.8187501, z: -3.5062497, w: 0.31875} + firstChild: 5017 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.8187501, z: -2.8687499, w: 0.31875} + firstChild: 5025 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 3.45625, z: -3.5062497, w: 0.31875} + firstChild: 5033 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 3.45625, z: -2.8687499, w: 0.31875} + firstChild: 5041 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.8187501, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.8187501, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 3.45625, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 3.45625, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.34850657, y: -0.09999943, z: -0.34850657, w: -0.09999943} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -4.7812495, y: 4.09375, z: -4.7812495, w: 0.31875} + firstChild: 5049 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 4.09375, z: -4.1437497, w: 0.31875} + firstChild: 5057 + - distancesA: {x: -0.34850657, y: -0.09999943, z: -0.35207498, w: -0.11180276} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + center: {x: -4.7812495, y: 4.73125, z: -4.7812495, w: 0.31875} + firstChild: 5065 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: -4.7812495, y: 4.73125, z: -4.1437497, w: 0.31875} + firstChild: 5073 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -4.1437497, y: 4.09375, z: -4.7812495, w: 0.31875} + firstChild: 5081 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -4.1437497, y: 4.09375, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + center: {x: -4.1437497, y: 4.73125, z: -4.7812495, w: 0.31875} + firstChild: 5089 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + center: {x: -4.1437497, y: 4.73125, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 4.09375, z: -3.5062497, w: 0.31875} + firstChild: 5097 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 4.09375, z: -2.8687499, w: 0.31875} + firstChild: 5105 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: -4.7812495, y: 4.73125, z: -3.5062497, w: 0.31875} + firstChild: 5113 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: -4.7812495, y: 4.73125, z: -2.8687499, w: 0.31875} + firstChild: 5121 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 4.09375, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 4.09375, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + center: {x: -4.1437497, y: 4.73125, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + center: {x: -4.1437497, y: 4.73125, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -3.5062497, y: 2.8187501, z: -4.7812495, w: 0.31875} + firstChild: 5129 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -3.5062497, y: 2.8187501, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -3.5062497, y: 3.45625, z: -4.7812495, w: 0.31875} + firstChild: 5137 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -3.5062497, y: 3.45625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -2.8687499, y: 2.8187501, z: -4.7812495, w: 0.31875} + firstChild: 5145 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -2.8687499, y: 2.8187501, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -2.8687499, y: 3.45625, z: -4.7812495, w: 0.31875} + firstChild: 5153 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -2.8687499, y: 3.45625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -3.5062497, y: 4.09375, z: -4.7812495, w: 0.31875} + firstChild: 5161 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -3.5062497, y: 4.09375, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + center: {x: -3.5062497, y: 4.73125, z: -4.7812495, w: 0.31875} + firstChild: 5169 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + center: {x: -3.5062497, y: 4.73125, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -2.8687499, y: 4.09375, z: -4.7812495, w: 0.31875} + firstChild: 5177 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -2.8687499, y: 4.09375, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + center: {x: -2.8687499, y: 4.73125, z: -4.7812495, w: 0.31875} + firstChild: 5185 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + center: {x: -2.8687499, y: 4.73125, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.8187501, z: -2.2312498, w: 0.31875} + firstChild: 5193 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.8187501, z: -1.5937499, w: 0.31875} + firstChild: 5201 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 3.45625, z: -2.2312498, w: 0.31875} + firstChild: 5209 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 3.45625, z: -1.5937499, w: 0.31875} + firstChild: 5217 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.8187501, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.8187501, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 3.45625, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 3.45625, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.8187501, z: -0.95624995, w: 0.31875} + firstChild: 5225 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.8187501, z: -0.31875, w: 0.31875} + firstChild: 5233 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 3.45625, z: -0.95624995, w: 0.31875} + firstChild: 5241 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 3.45625, z: -0.31875, w: 0.31875} + firstChild: 5249 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.8187501, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.8187501, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 3.45625, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 3.45625, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 4.09375, z: -2.2312498, w: 0.31875} + firstChild: 5257 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 4.09375, z: -1.5937499, w: 0.31875} + firstChild: 5265 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: -4.7812495, y: 4.73125, z: -2.2312498, w: 0.31875} + firstChild: 5273 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: -4.7812495, y: 4.73125, z: -1.5937499, w: 0.31875} + firstChild: 5281 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 4.09375, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 4.09375, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + center: {x: -4.1437497, y: 4.73125, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + center: {x: -4.1437497, y: 4.73125, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 4.09375, z: -0.95624995, w: 0.31875} + firstChild: 5289 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 4.09375, z: -0.31875, w: 0.31875} + firstChild: 5297 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: -4.7812495, y: 4.73125, z: -0.95624995, w: 0.31875} + firstChild: 5305 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: -4.7812495, y: 4.73125, z: -0.31875, w: 0.31875} + firstChild: 5313 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 4.09375, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 4.09375, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + center: {x: -4.1437497, y: 4.73125, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + center: {x: -4.1437497, y: 4.73125, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.3520751, y: -0.11180318, z: -0.77078766, w: -0.69473505} + distancesB: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + center: {x: -4.7812495, y: 5.3687506, z: -4.7812495, w: 0.31875} + firstChild: 5321 + - distancesA: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: -4.7812495, y: 5.3687506, z: -4.1437497, w: 0.31875} + firstChild: 5329 + - distancesA: {x: -0.77078766, y: -0.69473505, z: -1.3700666, w: -1.3287684} + distancesB: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + center: {x: -4.7812495, y: 6.0062504, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: -4.7812495, y: 6.0062504, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + distancesB: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + center: {x: -4.1437497, y: 5.3687506, z: -4.7812495, w: 0.31875} + firstChild: 5337 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + center: {x: -4.1437497, y: 5.3687506, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + distancesB: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + center: {x: -4.1437497, y: 6.0062504, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + center: {x: -4.1437497, y: 6.0062504, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: -4.7812495, y: 5.3687506, z: -3.5062497, w: 0.31875} + firstChild: 5345 + - distancesA: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: -4.7812495, y: 5.3687506, z: -2.8687499, w: 0.31875} + firstChild: 5353 + - distancesA: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: -4.7812495, y: 6.0062504, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: -4.7812495, y: 6.0062504, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + center: {x: -4.1437497, y: 5.3687506, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + center: {x: -4.1437497, y: 5.3687506, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + center: {x: -4.1437497, y: 6.0062504, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + center: {x: -4.1437497, y: 6.0062504, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + distancesB: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + center: {x: -3.5062497, y: 5.3687506, z: -4.7812495, w: 0.31875} + firstChild: 5361 + - distancesA: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + distancesB: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + center: {x: -3.5062497, y: 5.3687506, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + distancesB: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + center: {x: -3.5062497, y: 6.0062504, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + distancesB: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + center: {x: -3.5062497, y: 6.0062504, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + distancesB: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + center: {x: -2.8687499, y: 5.3687506, z: -4.7812495, w: 0.31875} + firstChild: 5369 + - distancesA: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + distancesB: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + center: {x: -2.8687499, y: 5.3687506, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + distancesB: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + center: {x: -2.8687499, y: 6.0062504, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + distancesB: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + center: {x: -2.8687499, y: 6.0062504, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: -4.7812495, y: 5.3687506, z: -2.2312498, w: 0.31875} + firstChild: 5377 + - distancesA: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: -4.7812495, y: 5.3687506, z: -1.5937499, w: 0.31875} + firstChild: 5385 + - distancesA: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: -4.7812495, y: 6.0062504, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: -4.7812495, y: 6.0062504, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + center: {x: -4.1437497, y: 5.3687506, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + center: {x: -4.1437497, y: 5.3687506, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + center: {x: -4.1437497, y: 6.0062504, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + center: {x: -4.1437497, y: 6.0062504, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: -4.7812495, y: 5.3687506, z: -0.95624995, w: 0.31875} + firstChild: 5393 + - distancesA: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: -4.7812495, y: 5.3687506, z: -0.31875, w: 0.31875} + firstChild: 5401 + - distancesA: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: -4.7812495, y: 6.0062504, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: -4.7812495, y: 6.0062504, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + center: {x: -4.1437497, y: 5.3687506, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + center: {x: -4.1437497, y: 5.3687506, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + center: {x: -4.1437497, y: 6.0062504, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + center: {x: -4.1437497, y: 6.0062504, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -2.2312498, y: 2.8187501, z: -4.7812495, w: 0.31875} + firstChild: 5409 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -2.2312498, y: 2.8187501, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -2.2312498, y: 3.45625, z: -4.7812495, w: 0.31875} + firstChild: 5417 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -2.2312498, y: 3.45625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -1.5937499, y: 2.8187501, z: -4.7812495, w: 0.31875} + firstChild: 5425 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -1.5937499, y: 2.8187501, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -1.5937499, y: 3.45625, z: -4.7812495, w: 0.31875} + firstChild: 5433 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -1.5937499, y: 3.45625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -2.2312498, y: 4.09375, z: -4.7812495, w: 0.31875} + firstChild: 5441 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -2.2312498, y: 4.09375, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + center: {x: -2.2312498, y: 4.73125, z: -4.7812495, w: 0.31875} + firstChild: 5449 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + center: {x: -2.2312498, y: 4.73125, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -1.5937499, y: 4.09375, z: -4.7812495, w: 0.31875} + firstChild: 5457 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -1.5937499, y: 4.09375, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + center: {x: -1.5937499, y: 4.73125, z: -4.7812495, w: 0.31875} + firstChild: 5465 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + center: {x: -1.5937499, y: 4.73125, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -0.95624995, y: 2.8187501, z: -4.7812495, w: 0.31875} + firstChild: 5473 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -0.95624995, y: 2.8187501, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -0.95624995, y: 3.45625, z: -4.7812495, w: 0.31875} + firstChild: 5481 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -0.95624995, y: 3.45625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -0.31875, y: 2.8187501, z: -4.7812495, w: 0.31875} + firstChild: 5489 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -0.31875, y: 2.8187501, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -0.31875, y: 3.45625, z: -4.7812495, w: 0.31875} + firstChild: 5497 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -0.31875, y: 3.45625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -0.95624995, y: 4.09375, z: -4.7812495, w: 0.31875} + firstChild: 5505 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -0.95624995, y: 4.09375, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + center: {x: -0.95624995, y: 4.73125, z: -4.7812495, w: 0.31875} + firstChild: 5513 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + center: {x: -0.95624995, y: 4.73125, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: -0.31875, y: 4.09375, z: -4.7812495, w: 0.31875} + firstChild: 5521 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: -0.31875, y: 4.09375, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + center: {x: -0.31875, y: 4.73125, z: -4.7812495, w: 0.31875} + firstChild: 5529 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + center: {x: -0.31875, y: 4.73125, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + distancesB: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + center: {x: -2.2312498, y: 5.3687506, z: -4.7812495, w: 0.31875} + firstChild: 5537 + - distancesA: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + distancesB: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + center: {x: -2.2312498, y: 5.3687506, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + distancesB: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + center: {x: -2.2312498, y: 6.0062504, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + distancesB: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + center: {x: -2.2312498, y: 6.0062504, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + distancesB: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + center: {x: -1.5937499, y: 5.3687506, z: -4.7812495, w: 0.31875} + firstChild: 5545 + - distancesA: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + distancesB: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + center: {x: -1.5937499, y: 5.3687506, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + distancesB: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + center: {x: -1.5937499, y: 6.0062504, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + distancesB: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + center: {x: -1.5937499, y: 6.0062504, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + distancesB: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + center: {x: -0.95624995, y: 5.3687506, z: -4.7812495, w: 0.31875} + firstChild: 5553 + - distancesA: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + distancesB: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + center: {x: -0.95624995, y: 5.3687506, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + distancesB: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + center: {x: -0.95624995, y: 6.0062504, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + distancesB: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + center: {x: -0.95624995, y: 6.0062504, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + distancesB: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + center: {x: -0.31875, y: 5.3687506, z: -4.7812495, w: 0.31875} + firstChild: 5561 + - distancesA: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + distancesB: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + center: {x: -0.31875, y: 5.3687506, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + distancesB: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + center: {x: -0.31875, y: 6.0062504, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + distancesB: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + center: {x: -0.31875, y: 6.0062504, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.8187501, z: 0.31875, w: 0.31875} + firstChild: 5569 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.8187501, z: 0.95624995, w: 0.31875} + firstChild: 5577 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 3.45625, z: 0.31875, w: 0.31875} + firstChild: 5585 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 3.45625, z: 0.95624995, w: 0.31875} + firstChild: 5593 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.8187501, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.8187501, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 3.45625, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 3.45625, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.8187501, z: 1.5937499, w: 0.31875} + firstChild: 5601 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.8187501, z: 2.2312498, w: 0.31875} + firstChild: 5609 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 3.45625, z: 1.5937499, w: 0.31875} + firstChild: 5617 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 3.45625, z: 2.2312498, w: 0.31875} + firstChild: 5625 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.8187501, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.8187501, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 3.45625, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 3.45625, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 4.09375, z: 0.31875, w: 0.31875} + firstChild: 5633 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 4.09375, z: 0.95624995, w: 0.31875} + firstChild: 5641 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: -4.7812495, y: 4.73125, z: 0.31875, w: 0.31875} + firstChild: 5649 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: -4.7812495, y: 4.73125, z: 0.95624995, w: 0.31875} + firstChild: 5657 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 4.09375, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 4.09375, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + center: {x: -4.1437497, y: 4.73125, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + center: {x: -4.1437497, y: 4.73125, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 4.09375, z: 1.5937499, w: 0.31875} + firstChild: 5665 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 4.09375, z: 2.2312498, w: 0.31875} + firstChild: 5673 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: -4.7812495, y: 4.73125, z: 1.5937499, w: 0.31875} + firstChild: 5681 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: -4.7812495, y: 4.73125, z: 2.2312498, w: 0.31875} + firstChild: 5689 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 4.09375, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 4.09375, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + center: {x: -4.1437497, y: 4.73125, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + center: {x: -4.1437497, y: 4.73125, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.8187501, z: 2.8687499, w: 0.31875} + firstChild: 5697 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.8187501, z: 3.5062497, w: 0.31875} + firstChild: 5705 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 3.45625, z: 2.8687499, w: 0.31875} + firstChild: 5713 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 3.45625, z: 3.5062497, w: 0.31875} + firstChild: 5721 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.8187501, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 2.8187501, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 3.45625, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 3.45625, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 2.8187501, z: 4.1437497, w: 0.31875} + firstChild: 5729 + - distancesA: {x: -0.09999943, y: -0.34850657, z: -0.09999943, w: -0.34850657} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -4.7812495, y: 2.8187501, z: 4.7812495, w: 0.31875} + firstChild: 5737 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 3.45625, z: 4.1437497, w: 0.31875} + firstChild: 5745 + - distancesA: {x: -0.09999943, y: -0.34850657, z: -0.09999943, w: -0.34850657} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -4.7812495, y: 3.45625, z: 4.7812495, w: 0.31875} + firstChild: 5753 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -4.1437497, y: 2.8187501, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -4.1437497, y: 2.8187501, z: 4.7812495, w: 0.31875} + firstChild: 5761 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -4.1437497, y: 3.45625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -4.1437497, y: 3.45625, z: 4.7812495, w: 0.31875} + firstChild: 5769 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 4.09375, z: 2.8687499, w: 0.31875} + firstChild: 5777 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 4.09375, z: 3.5062497, w: 0.31875} + firstChild: 5785 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: -4.7812495, y: 4.73125, z: 2.8687499, w: 0.31875} + firstChild: 5793 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: -4.7812495, y: 4.73125, z: 3.5062497, w: 0.31875} + firstChild: 5801 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 4.09375, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + center: {x: -4.1437497, y: 4.09375, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + center: {x: -4.1437497, y: 4.73125, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + center: {x: -4.1437497, y: 4.73125, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: -4.7812495, y: 4.09375, z: 4.1437497, w: 0.31875} + firstChild: 5809 + - distancesA: {x: -0.09999943, y: -0.34850657, z: -0.09999943, w: -0.34850657} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -4.7812495, y: 4.09375, z: 4.7812495, w: 0.31875} + firstChild: 5817 + - distancesA: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: -4.7812495, y: 4.73125, z: 4.1437497, w: 0.31875} + firstChild: 5825 + - distancesA: {x: -0.09999943, y: -0.34850657, z: -0.11180276, w: -0.35207498} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + center: {x: -4.7812495, y: 4.73125, z: 4.7812495, w: 0.31875} + firstChild: 5833 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -4.1437497, y: 4.09375, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -4.1437497, y: 4.09375, z: 4.7812495, w: 0.31875} + firstChild: 5841 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + center: {x: -4.1437497, y: 4.73125, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + center: {x: -4.1437497, y: 4.73125, z: 4.7812495, w: 0.31875} + firstChild: 5849 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -3.5062497, y: 2.8187501, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -3.5062497, y: 2.8187501, z: 4.7812495, w: 0.31875} + firstChild: 5857 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -3.5062497, y: 3.45625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -3.5062497, y: 3.45625, z: 4.7812495, w: 0.31875} + firstChild: 5865 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -2.8687499, y: 2.8187501, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -2.8687499, y: 2.8187501, z: 4.7812495, w: 0.31875} + firstChild: 5873 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -2.8687499, y: 3.45625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -2.8687499, y: 3.45625, z: 4.7812495, w: 0.31875} + firstChild: 5881 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -3.5062497, y: 4.09375, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -3.5062497, y: 4.09375, z: 4.7812495, w: 0.31875} + firstChild: 5889 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + center: {x: -3.5062497, y: 4.73125, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + center: {x: -3.5062497, y: 4.73125, z: 4.7812495, w: 0.31875} + firstChild: 5897 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -2.8687499, y: 4.09375, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -2.8687499, y: 4.09375, z: 4.7812495, w: 0.31875} + firstChild: 5905 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + center: {x: -2.8687499, y: 4.73125, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + center: {x: -2.8687499, y: 4.73125, z: 4.7812495, w: 0.31875} + firstChild: 5913 + - distancesA: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: -4.7812495, y: 5.3687506, z: 0.31875, w: 0.31875} + firstChild: 5921 + - distancesA: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: -4.7812495, y: 5.3687506, z: 0.95624995, w: 0.31875} + firstChild: 5929 + - distancesA: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: -4.7812495, y: 6.0062504, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: -4.7812495, y: 6.0062504, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + center: {x: -4.1437497, y: 5.3687506, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + center: {x: -4.1437497, y: 5.3687506, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + center: {x: -4.1437497, y: 6.0062504, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + center: {x: -4.1437497, y: 6.0062504, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: -4.7812495, y: 5.3687506, z: 1.5937499, w: 0.31875} + firstChild: 5937 + - distancesA: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: -4.7812495, y: 5.3687506, z: 2.2312498, w: 0.31875} + firstChild: 5945 + - distancesA: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: -4.7812495, y: 6.0062504, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: -4.7812495, y: 6.0062504, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + center: {x: -4.1437497, y: 5.3687506, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + center: {x: -4.1437497, y: 5.3687506, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + center: {x: -4.1437497, y: 6.0062504, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + center: {x: -4.1437497, y: 6.0062504, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: -4.7812495, y: 5.3687506, z: 2.8687499, w: 0.31875} + firstChild: 5953 + - distancesA: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: -4.7812495, y: 5.3687506, z: 3.5062497, w: 0.31875} + firstChild: 5961 + - distancesA: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: -4.7812495, y: 6.0062504, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: -4.7812495, y: 6.0062504, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + center: {x: -4.1437497, y: 5.3687506, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + center: {x: -4.1437497, y: 5.3687506, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + center: {x: -4.1437497, y: 6.0062504, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + center: {x: -4.1437497, y: 6.0062504, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: -4.7812495, y: 5.3687506, z: 4.1437497, w: 0.31875} + firstChild: 5969 + - distancesA: {x: -0.11180318, y: -0.3520751, z: -0.69473505, w: -0.77078766} + distancesB: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + center: {x: -4.7812495, y: 5.3687506, z: 4.7812495, w: 0.31875} + firstChild: 5977 + - distancesA: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: -4.7812495, y: 6.0062504, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.69473505, y: -0.77078766, z: -1.3287684, w: -1.3700666} + distancesB: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + center: {x: -4.7812495, y: 6.0062504, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + center: {x: -4.1437497, y: 5.3687506, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + distancesB: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + center: {x: -4.1437497, y: 5.3687506, z: 4.7812495, w: 0.31875} + firstChild: 5985 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + center: {x: -4.1437497, y: 6.0062504, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + distancesB: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + center: {x: -4.1437497, y: 6.0062504, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + distancesB: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + center: {x: -3.5062497, y: 5.3687506, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + distancesB: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + center: {x: -3.5062497, y: 5.3687506, z: 4.7812495, w: 0.31875} + firstChild: 5993 + - distancesA: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + distancesB: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + center: {x: -3.5062497, y: 6.0062504, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + distancesB: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + center: {x: -3.5062497, y: 6.0062504, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + distancesB: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + center: {x: -2.8687499, y: 5.3687506, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + distancesB: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + center: {x: -2.8687499, y: 5.3687506, z: 4.7812495, w: 0.31875} + firstChild: 6001 + - distancesA: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + distancesB: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + center: {x: -2.8687499, y: 6.0062504, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + distancesB: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + center: {x: -2.8687499, y: 6.0062504, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -2.2312498, y: 2.8187501, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -2.2312498, y: 2.8187501, z: 4.7812495, w: 0.31875} + firstChild: 6009 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -2.2312498, y: 3.45625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -2.2312498, y: 3.45625, z: 4.7812495, w: 0.31875} + firstChild: 6017 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -1.5937499, y: 2.8187501, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -1.5937499, y: 2.8187501, z: 4.7812495, w: 0.31875} + firstChild: 6025 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -1.5937499, y: 3.45625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -1.5937499, y: 3.45625, z: 4.7812495, w: 0.31875} + firstChild: 6033 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -2.2312498, y: 4.09375, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -2.2312498, y: 4.09375, z: 4.7812495, w: 0.31875} + firstChild: 6041 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + center: {x: -2.2312498, y: 4.73125, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + center: {x: -2.2312498, y: 4.73125, z: 4.7812495, w: 0.31875} + firstChild: 6049 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -1.5937499, y: 4.09375, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -1.5937499, y: 4.09375, z: 4.7812495, w: 0.31875} + firstChild: 6057 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + center: {x: -1.5937499, y: 4.73125, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + center: {x: -1.5937499, y: 4.73125, z: 4.7812495, w: 0.31875} + firstChild: 6065 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -0.95624995, y: 2.8187501, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -0.95624995, y: 2.8187501, z: 4.7812495, w: 0.31875} + firstChild: 6073 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -0.95624995, y: 3.45625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -0.95624995, y: 3.45625, z: 4.7812495, w: 0.31875} + firstChild: 6081 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -0.31875, y: 2.8187501, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -0.31875, y: 2.8187501, z: 4.7812495, w: 0.31875} + firstChild: 6089 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -0.31875, y: 3.45625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -0.31875, y: 3.45625, z: 4.7812495, w: 0.31875} + firstChild: 6097 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -0.95624995, y: 4.09375, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -0.95624995, y: 4.09375, z: 4.7812495, w: 0.31875} + firstChild: 6105 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + center: {x: -0.95624995, y: 4.73125, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + center: {x: -0.95624995, y: 4.73125, z: 4.7812495, w: 0.31875} + firstChild: 6113 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: -0.31875, y: 4.09375, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: -0.31875, y: 4.09375, z: 4.7812495, w: 0.31875} + firstChild: 6121 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + center: {x: -0.31875, y: 4.73125, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + center: {x: -0.31875, y: 4.73125, z: 4.7812495, w: 0.31875} + firstChild: 6129 + - distancesA: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + distancesB: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + center: {x: -2.2312498, y: 5.3687506, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + distancesB: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + center: {x: -2.2312498, y: 5.3687506, z: 4.7812495, w: 0.31875} + firstChild: 6137 + - distancesA: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + distancesB: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + center: {x: -2.2312498, y: 6.0062504, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + distancesB: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + center: {x: -2.2312498, y: 6.0062504, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + distancesB: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + center: {x: -1.5937499, y: 5.3687506, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + distancesB: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + center: {x: -1.5937499, y: 5.3687506, z: 4.7812495, w: 0.31875} + firstChild: 6145 + - distancesA: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + distancesB: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + center: {x: -1.5937499, y: 6.0062504, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + distancesB: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + center: {x: -1.5937499, y: 6.0062504, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + distancesB: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + center: {x: -0.95624995, y: 5.3687506, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + distancesB: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + center: {x: -0.95624995, y: 5.3687506, z: 4.7812495, w: 0.31875} + firstChild: 6153 + - distancesA: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + distancesB: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + center: {x: -0.95624995, y: 6.0062504, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + distancesB: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + center: {x: -0.95624995, y: 6.0062504, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + distancesB: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + center: {x: -0.31875, y: 5.3687506, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + distancesB: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + center: {x: -0.31875, y: 5.3687506, z: 4.7812495, w: 0.31875} + firstChild: 6161 + - distancesA: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + distancesB: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + center: {x: -0.31875, y: 6.0062504, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + distancesB: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + center: {x: -0.31875, y: 6.0062504, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.4229816, y: -1.3249999, z: -0.83250904, w: -0.6874999} + distancesB: {x: -1.4229817, y: -1.3249999, z: -0.83250904, w: -0.6874999} + center: {x: 0.31875, y: -1.0062499, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.31875, y: -1.0062499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.83250904, y: -0.6874999, z: -0.31510916, w: -0.049999956} + distancesB: {x: -0.83250904, y: -0.6874999, z: -0.31510916, w: -0.049999956} + center: {x: 0.31875, y: -0.36874995, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.31875, y: -0.36874995, z: -4.1437497, w: 0.31875} + firstChild: 6169 + - distancesA: {x: -1.4229817, y: -1.3249999, z: -0.83250904, w: -0.6874999} + distancesB: {x: -1.422982, y: -1.3249999, z: -0.83250886, w: -0.6874999} + center: {x: 0.95624995, y: -1.0062499, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.95624995, y: -1.0062499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.83250904, y: -0.6874999, z: -0.31510916, w: -0.049999956} + distancesB: {x: -0.8325089, y: -0.6874999, z: -0.31510916, w: -0.049999956} + center: {x: 0.95624995, y: -0.36874995, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.95624995, y: -0.36874995, z: -4.1437497, w: 0.31875} + firstChild: 6177 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.31875, y: -1.0062499, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.31875, y: -1.0062499, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.31875, y: -0.36874995, z: -3.5062497, w: 0.31875} + firstChild: 6185 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.31875, y: -0.36874995, z: -2.8687499, w: 0.31875} + firstChild: 6193 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.95624995, y: -1.0062499, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.95624995, y: -1.0062499, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.95624995, y: -0.36874995, z: -3.5062497, w: 0.31875} + firstChild: 6201 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.95624995, y: -0.36874995, z: -2.8687499, w: 0.31875} + firstChild: 6209 + - distancesA: {x: -1.422982, y: -1.3249999, z: -0.83250886, w: -0.6874999} + distancesB: {x: -1.4229825, y: -1.3249999, z: -0.83250904, w: -0.6874999} + center: {x: 1.5937499, y: -1.0062499, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 1.5937499, y: -1.0062499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.8325089, y: -0.6874999, z: -0.31510916, w: -0.049999956} + distancesB: {x: -0.83250904, y: -0.6874999, z: -0.31510916, w: -0.049999956} + center: {x: 1.5937499, y: -0.36874995, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 1.5937499, y: -0.36874995, z: -4.1437497, w: 0.31875} + firstChild: 6217 + - distancesA: {x: -1.4229825, y: -1.3249999, z: -0.83250904, w: -0.6874999} + distancesB: {x: -1.4229819, y: -1.3249999, z: -0.83250886, w: -0.6874999} + center: {x: 2.2312498, y: -1.0062499, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.2312498, y: -1.0062499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.83250904, y: -0.6874999, z: -0.31510916, w: -0.049999956} + distancesB: {x: -0.8325089, y: -0.6874999, z: -0.31510916, w: -0.049999956} + center: {x: 2.2312498, y: -0.36874995, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.2312498, y: -0.36874995, z: -4.1437497, w: 0.31875} + firstChild: 6225 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 1.5937499, y: -1.0062499, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 1.5937499, y: -1.0062499, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 1.5937499, y: -0.36874995, z: -3.5062497, w: 0.31875} + firstChild: 6233 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 1.5937499, y: -0.36874995, z: -2.8687499, w: 0.31875} + firstChild: 6241 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.2312498, y: -1.0062499, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.2312498, y: -1.0062499, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.2312498, y: -0.36874995, z: -3.5062497, w: 0.31875} + firstChild: 6249 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.2312498, y: -0.36874995, z: -2.8687499, w: 0.31875} + firstChild: 6257 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.31875, y: -1.0062499, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.31875, y: -1.0062499, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.31875, y: -0.36874995, z: -2.2312498, w: 0.31875} + firstChild: 6265 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.31875, y: -0.36874995, z: -1.5937499, w: 0.31875} + firstChild: 6273 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.95624995, y: -1.0062499, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.95624995, y: -1.0062499, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.95624995, y: -0.36874995, z: -2.2312498, w: 0.31875} + firstChild: 6281 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.95624995, y: -0.36874995, z: -1.5937499, w: 0.31875} + firstChild: 6289 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.31875, y: -1.0062499, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.31875, y: -1.0062499, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.31875, y: -0.36874995, z: -0.95624995, w: 0.31875} + firstChild: 6297 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.31875, y: -0.36874995, z: -0.31875, w: 0.31875} + firstChild: 6305 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.95624995, y: -1.0062499, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.95624995, y: -1.0062499, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.95624995, y: -0.36874995, z: -0.95624995, w: 0.31875} + firstChild: 6313 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.95624995, y: -0.36874995, z: -0.31875, w: 0.31875} + firstChild: 6321 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 1.5937499, y: -1.0062499, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 1.5937499, y: -1.0062499, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 1.5937499, y: -0.36874995, z: -2.2312498, w: 0.31875} + firstChild: 6329 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 1.5937499, y: -0.36874995, z: -1.5937499, w: 0.31875} + firstChild: 6337 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.2312498, y: -1.0062499, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.2312498, y: -1.0062499, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.2312498, y: -0.36874995, z: -2.2312498, w: 0.31875} + firstChild: 6345 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.2312498, y: -0.36874995, z: -1.5937499, w: 0.31875} + firstChild: 6353 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 1.5937499, y: -1.0062499, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 1.5937499, y: -1.0062499, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 1.5937499, y: -0.36874995, z: -0.95624995, w: 0.31875} + firstChild: 6361 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 1.5937499, y: -0.36874995, z: -0.31875, w: 0.31875} + firstChild: 6369 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.2312498, y: -1.0062499, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.2312498, y: -1.0062499, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.2312498, y: -0.36874995, z: -0.95624995, w: 0.31875} + firstChild: 6377 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.2312498, y: -0.36874995, z: -0.31875, w: 0.31875} + firstChild: 6385 + - distancesA: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 0.5375004} + center: {x: 0.31875, y: 0.26875004, z: -4.7812495, w: 0.31875} + firstChild: 6393 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + center: {x: 0.31875, y: 0.26875004, z: -4.1437497, w: 0.31875} + firstChild: 6401 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 0.31875, y: 0.90625, z: -4.7812495, w: 0.31875} + firstChild: 6409 + - distancesA: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + center: {x: 0.31875, y: 0.90625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 0.5375004} + center: {x: 0.95624995, y: 0.26875004, z: -4.7812495, w: 0.31875} + firstChild: 6417 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + center: {x: 0.95624995, y: 0.26875004, z: -4.1437497, w: 0.31875} + firstChild: 6425 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 0.95624995, y: 0.90625, z: -4.7812495, w: 0.31875} + firstChild: 6433 + - distancesA: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + center: {x: 0.95624995, y: 0.90625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.31875, y: 0.26875004, z: -3.5062497, w: 0.31875} + firstChild: 6441 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.31875, y: 0.26875004, z: -2.8687499, w: 0.31875} + firstChild: 6449 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.225} + center: {x: 0.31875, y: 0.90625, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 0.31875, y: 0.90625, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.95624995, y: 0.26875004, z: -3.5062497, w: 0.31875} + firstChild: 6457 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.95624995, y: 0.26875004, z: -2.8687499, w: 0.31875} + firstChild: 6465 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.225} + center: {x: 0.95624995, y: 0.90625, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 0.95624995, y: 0.90625, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 0.31875, y: 1.5437499, z: -4.7812495, w: 0.31875} + firstChild: 6473 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 0.31875, y: 1.5437499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 0.31875, y: 2.1812499, z: -4.7812495, w: 0.31875} + firstChild: 6481 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 0.31875, y: 2.1812499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 0.95624995, y: 1.5437499, z: -4.7812495, w: 0.31875} + firstChild: 6489 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 0.95624995, y: 1.5437499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 0.95624995, y: 2.1812499, z: -4.7812495, w: 0.31875} + firstChild: 6497 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 0.95624995, y: 2.1812499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 0.5375004} + center: {x: 1.5937499, y: 0.26875004, z: -4.7812495, w: 0.31875} + firstChild: 6505 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + center: {x: 1.5937499, y: 0.26875004, z: -4.1437497, w: 0.31875} + firstChild: 6513 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 1.5937499, y: 0.90625, z: -4.7812495, w: 0.31875} + firstChild: 6521 + - distancesA: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + center: {x: 1.5937499, y: 0.90625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 0.5375004} + center: {x: 2.2312498, y: 0.26875004, z: -4.7812495, w: 0.31875} + firstChild: 6529 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + center: {x: 2.2312498, y: 0.26875004, z: -4.1437497, w: 0.31875} + firstChild: 6537 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 2.2312498, y: 0.90625, z: -4.7812495, w: 0.31875} + firstChild: 6545 + - distancesA: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + center: {x: 2.2312498, y: 0.90625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 1.5937499, y: 0.26875004, z: -3.5062497, w: 0.31875} + firstChild: 6553 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 1.5937499, y: 0.26875004, z: -2.8687499, w: 0.31875} + firstChild: 6561 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.225} + center: {x: 1.5937499, y: 0.90625, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 1.5937499, y: 0.90625, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.2312498, y: 0.26875004, z: -3.5062497, w: 0.31875} + firstChild: 6569 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.2312498, y: 0.26875004, z: -2.8687499, w: 0.31875} + firstChild: 6577 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.225} + center: {x: 2.2312498, y: 0.90625, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 2.2312498, y: 0.90625, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 1.5937499, y: 1.5437499, z: -4.7812495, w: 0.31875} + firstChild: 6585 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 1.5937499, y: 1.5437499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 1.5937499, y: 2.1812499, z: -4.7812495, w: 0.31875} + firstChild: 6593 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 1.5937499, y: 2.1812499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 2.2312498, y: 1.5437499, z: -4.7812495, w: 0.31875} + firstChild: 6601 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 2.2312498, y: 1.5437499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 2.2312498, y: 2.1812499, z: -4.7812495, w: 0.31875} + firstChild: 6609 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 2.2312498, y: 2.1812499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.31875, y: 0.26875004, z: -2.2312498, w: 0.31875} + firstChild: 6617 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.31875, y: 0.26875004, z: -1.5937499, w: 0.31875} + firstChild: 6625 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 0.31875, y: 0.90625, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 0.31875, y: 0.90625, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.95624995, y: 0.26875004, z: -2.2312498, w: 0.31875} + firstChild: 6633 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.95624995, y: 0.26875004, z: -1.5937499, w: 0.31875} + firstChild: 6641 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 0.95624995, y: 0.90625, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 0.95624995, y: 0.90625, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.31875, y: 0.26875004, z: -0.95624995, w: 0.31875} + firstChild: 6649 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.31875, y: 0.26875004, z: -0.31875, w: 0.31875} + firstChild: 6657 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 0.31875, y: 0.90625, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 0.31875, y: 0.90625, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.95624995, y: 0.26875004, z: -0.95624995, w: 0.31875} + firstChild: 6665 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.95624995, y: 0.26875004, z: -0.31875, w: 0.31875} + firstChild: 6673 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 0.95624995, y: 0.90625, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 0.95624995, y: 0.90625, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 1.5937499, y: 0.26875004, z: -2.2312498, w: 0.31875} + firstChild: 6681 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 1.5937499, y: 0.26875004, z: -1.5937499, w: 0.31875} + firstChild: 6689 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 1.5937499, y: 0.90625, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 1.5937499, y: 0.90625, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.2312498, y: 0.26875004, z: -2.2312498, w: 0.31875} + firstChild: 6697 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.2312498, y: 0.26875004, z: -1.5937499, w: 0.31875} + firstChild: 6705 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 2.2312498, y: 0.90625, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 2.2312498, y: 0.90625, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 1.5937499, y: 0.26875004, z: -0.95624995, w: 0.31875} + firstChild: 6713 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 1.5937499, y: 0.26875004, z: -0.31875, w: 0.31875} + firstChild: 6721 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 1.5937499, y: 0.90625, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 1.5937499, y: 0.90625, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.2312498, y: 0.26875004, z: -0.95624995, w: 0.31875} + firstChild: 6729 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.2312498, y: 0.26875004, z: -0.31875, w: 0.31875} + firstChild: 6737 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 2.2312498, y: 0.90625, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 2.2312498, y: 0.90625, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.4229816, y: -1.3249999, z: -0.83250886, w: -0.6874999} + distancesB: {x: -1.4229816, y: -1.3249999, z: -0.83250886, w: -0.6874999} + center: {x: 2.8687499, y: -1.0062499, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.8687499, y: -1.0062499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.8325089, y: -0.6874999, z: -0.31510916, w: -0.049999956} + distancesB: {x: -0.8325089, y: -0.6874999, z: -0.31510916, w: -0.049999956} + center: {x: 2.8687499, y: -0.36874995, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.8687499, y: -0.36874995, z: -4.1437497, w: 0.31875} + firstChild: 6745 + - distancesA: {x: -1.4229816, y: -1.3249999, z: -0.83250886, w: -0.6874999} + distancesB: {x: -1.4229816, y: -1.3249999, z: -0.83250904, w: -0.6874999} + center: {x: 3.5062497, y: -1.0062499, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 3.5062497, y: -1.0062499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.8325089, y: -0.6874999, z: -0.31510916, w: -0.049999956} + distancesB: {x: -0.83250904, y: -0.6874999, z: -0.31510916, w: -0.049999956} + center: {x: 3.5062497, y: -0.36874995, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 3.5062497, y: -0.36874995, z: -4.1437497, w: 0.31875} + firstChild: 6753 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.8687499, y: -1.0062499, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.8687499, y: -1.0062499, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.8687499, y: -0.36874995, z: -3.5062497, w: 0.31875} + firstChild: 6761 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.8687499, y: -0.36874995, z: -2.8687499, w: 0.31875} + firstChild: 6769 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 3.5062497, y: -1.0062499, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 3.5062497, y: -1.0062499, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 3.5062497, y: -0.36874995, z: -3.5062497, w: 0.31875} + firstChild: 6777 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 3.5062497, y: -0.36874995, z: -2.8687499, w: 0.31875} + firstChild: 6785 + - distancesA: {x: -1.4229816, y: -1.3249999, z: -0.83250904, w: -0.6874999} + distancesB: {x: -1.4229816, y: -1.3249999, z: -0.83250886, w: -0.6874999} + center: {x: 4.1437497, y: -1.0062499, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 4.1437497, y: -1.0062499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.83250904, y: -0.6874999, z: -0.31510916, w: -0.049999956} + distancesB: {x: -0.8325089, y: -0.6874999, z: -0.31510916, w: -0.049999956} + center: {x: 4.1437497, y: -0.36874995, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 4.1437497, y: -0.36874995, z: -4.1437497, w: 0.31875} + firstChild: 6793 + - distancesA: {x: -1.4229816, y: -1.3249999, z: -0.83250886, w: -0.6874999} + distancesB: {x: -1.5167226, y: -1.422983, z: -0.9615866, w: -0.8325113} + center: {x: 4.7812495, y: -1.0062499, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.422983, y: -1.4229839, z: -0.8325113, w: -0.8325126} + center: {x: 4.7812495, y: -1.0062499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.8325089, y: -0.6874999, z: -0.31510916, w: -0.049999956} + distancesB: {x: -0.96158665, y: -0.8325113, z: -0.51686233, w: -0.31511536} + center: {x: 4.7812495, y: -0.36874995, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.8325113, y: -0.8325127, z: -0.31511536, w: -0.31510916} + center: {x: 4.7812495, y: -0.36874995, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 4.1437497, y: -1.0062499, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 4.1437497, y: -1.0062499, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 4.1437497, y: -0.36874995, z: -3.5062497, w: 0.31875} + firstChild: 6801 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 4.1437497, y: -0.36874995, z: -2.8687499, w: 0.31875} + firstChild: 6809 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.4229892, y: -1.4229848, z: -0.8325489, w: -0.83251446} + center: {x: 4.7812495, y: -1.0062499, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.4229848, y: -1.422986, z: -0.83251446, w: -0.83250904} + center: {x: 4.7812495, y: -1.0062499, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.832549, y: -0.8325144, z: -0.31510916, w: -0.31510916} + center: {x: 4.7812495, y: -0.36874995, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.8325144, y: -0.83250904, z: -0.31510916, w: -0.31510916} + center: {x: 4.7812495, y: -0.36874995, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.8687499, y: -1.0062499, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.8687499, y: -1.0062499, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.8687499, y: -0.36874995, z: -2.2312498, w: 0.31875} + firstChild: 6817 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.8687499, y: -0.36874995, z: -1.5937499, w: 0.31875} + firstChild: 6825 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 3.5062497, y: -1.0062499, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 3.5062497, y: -1.0062499, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 3.5062497, y: -0.36874995, z: -2.2312498, w: 0.31875} + firstChild: 6833 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 3.5062497, y: -0.36874995, z: -1.5937499, w: 0.31875} + firstChild: 6841 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.8687499, y: -1.0062499, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.8687499, y: -1.0062499, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.8687499, y: -0.36874995, z: -0.95624995, w: 0.31875} + firstChild: 6849 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.8687499, y: -0.36874995, z: -0.31875, w: 0.31875} + firstChild: 6857 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 3.5062497, y: -1.0062499, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 3.5062497, y: -1.0062499, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 3.5062497, y: -0.36874995, z: -0.95624995, w: 0.31875} + firstChild: 6865 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 3.5062497, y: -0.36874995, z: -0.31875, w: 0.31875} + firstChild: 6873 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 4.1437497, y: -1.0062499, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 4.1437497, y: -1.0062499, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 4.1437497, y: -0.36874995, z: -2.2312498, w: 0.31875} + firstChild: 6881 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 4.1437497, y: -0.36874995, z: -1.5937499, w: 0.31875} + firstChild: 6889 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.422986, y: -1.4229826, z: -0.83250904, w: -0.83250886} + center: {x: 4.7812495, y: -1.0062499, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.4229826, y: -1.422982, z: -0.83250886, w: -0.83250904} + center: {x: 4.7812495, y: -1.0062499, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.83250904, y: -0.8325089, z: -0.31510916, w: -0.31510878} + center: {x: 4.7812495, y: -0.36874995, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.8325089, y: -0.83250904, z: -0.31510878, w: -0.3151088} + center: {x: 4.7812495, y: -0.36874995, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 4.1437497, y: -1.0062499, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 4.1437497, y: -1.0062499, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 4.1437497, y: -0.36874995, z: -0.95624995, w: 0.31875} + firstChild: 6897 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 4.1437497, y: -0.36874995, z: -0.31875, w: 0.31875} + firstChild: 6905 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.422982, y: -1.4229835, z: -0.83250904, w: -0.83250886} + center: {x: 4.7812495, y: -1.0062499, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.4229835, y: -1.4229816, z: -0.83250886, w: -0.83250904} + center: {x: 4.7812495, y: -1.0062499, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.83250904, y: -0.8325089, z: -0.3151088, w: -0.3151088} + center: {x: 4.7812495, y: -0.36874995, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.8325089, y: -0.83250904, z: -0.3151088, w: -0.31510916} + center: {x: 4.7812495, y: -0.36874995, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 0.5375004} + center: {x: 2.8687499, y: 0.26875004, z: -4.7812495, w: 0.31875} + firstChild: 6913 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + center: {x: 2.8687499, y: 0.26875004, z: -4.1437497, w: 0.31875} + firstChild: 6921 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 2.8687499, y: 0.90625, z: -4.7812495, w: 0.31875} + firstChild: 6929 + - distancesA: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + center: {x: 2.8687499, y: 0.90625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 0.5375004} + center: {x: 3.5062497, y: 0.26875004, z: -4.7812495, w: 0.31875} + firstChild: 6937 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + center: {x: 3.5062497, y: 0.26875004, z: -4.1437497, w: 0.31875} + firstChild: 6945 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 3.5062497, y: 0.90625, z: -4.7812495, w: 0.31875} + firstChild: 6953 + - distancesA: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + center: {x: 3.5062497, y: 0.90625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.8687499, y: 0.26875004, z: -3.5062497, w: 0.31875} + firstChild: 6961 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.8687499, y: 0.26875004, z: -2.8687499, w: 0.31875} + firstChild: 6969 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.225} + center: {x: 2.8687499, y: 0.90625, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 2.8687499, y: 0.90625, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 3.5062497, y: 0.26875004, z: -3.5062497, w: 0.31875} + firstChild: 6977 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 3.5062497, y: 0.26875004, z: -2.8687499, w: 0.31875} + firstChild: 6985 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + center: {x: 3.5062497, y: 0.90625, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + center: {x: 3.5062497, y: 0.90625, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 2.8687499, y: 1.5437499, z: -4.7812495, w: 0.31875} + firstChild: 6993 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 2.8687499, y: 1.5437499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 2.8687499, y: 2.1812499, z: -4.7812495, w: 0.31875} + firstChild: 7001 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 2.8687499, y: 2.1812499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 3.5062497, y: 1.5437499, z: -4.7812495, w: 0.31875} + firstChild: 7009 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 3.5062497, y: 1.5437499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 3.5062497, y: 2.1812499, z: -4.7812495, w: 0.31875} + firstChild: 7017 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 3.5062497, y: 2.1812499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 0.5375004} + center: {x: 4.1437497, y: 0.26875004, z: -4.7812495, w: 0.31875} + firstChild: 7025 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.26875004, z: -4.1437497, w: 0.31875} + firstChild: 7033 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 4.1437497, y: 0.90625, z: -4.7812495, w: 0.31875} + firstChild: 7041 + - distancesA: {x: 0.5375004, y: 0.5875, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.90625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.31510916, y: -0.049999956, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.51686233, y: -0.31511536, z: -0.34850657, w: -0.09999943} + center: {x: 4.7812495, y: 0.26875004, z: -4.7812495, w: 0.31875} + firstChild: 7049 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.31511536, y: -0.31510916, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.26875004, z: -4.1437497, w: 0.31875} + firstChild: 7057 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.34850657, y: -0.09999943, z: -0.34850657, w: -0.09999943} + center: {x: 4.7812495, y: 0.90625, z: -4.7812495, w: 0.31875} + firstChild: 7065 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.90625, z: -4.1437497, w: 0.31875} + firstChild: 7073 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.26875004, z: -3.5062497, w: 0.31875} + firstChild: 7081 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.26875004, z: -2.8687499, w: 0.31875} + firstChild: 7089 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.90625, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.90625, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.31510916, y: -0.31510916, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.26875004, z: -3.5062497, w: 0.31875} + firstChild: 7097 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.31510916, y: -0.31510916, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.26875004, z: -2.8687499, w: 0.31875} + firstChild: 7105 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.90625, z: -3.5062497, w: 0.31875} + firstChild: 7113 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.90625, z: -2.8687499, w: 0.31875} + firstChild: 7121 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 4.1437497, y: 1.5437499, z: -4.7812495, w: 0.31875} + firstChild: 7129 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 1.5437499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 4.1437497, y: 2.1812499, z: -4.7812495, w: 0.31875} + firstChild: 7137 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.1812499, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.34850657, y: -0.09999943, z: -0.34850657, w: -0.09999943} + center: {x: 4.7812495, y: 1.5437499, z: -4.7812495, w: 0.31875} + firstChild: 7145 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 1.5437499, z: -4.1437497, w: 0.31875} + firstChild: 7153 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.34850657, y: -0.09999943, z: -0.34850657, w: -0.09999943} + center: {x: 4.7812495, y: 2.1812499, z: -4.7812495, w: 0.31875} + firstChild: 7161 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.1812499, z: -4.1437497, w: 0.31875} + firstChild: 7169 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 1.5437499, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 1.5437499, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.1812499, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.1812499, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 1.5437499, z: -3.5062497, w: 0.31875} + firstChild: 7177 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 1.5437499, z: -2.8687499, w: 0.31875} + firstChild: 7185 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.1812499, z: -3.5062497, w: 0.31875} + firstChild: 7193 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.1812499, z: -2.8687499, w: 0.31875} + firstChild: 7201 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.8687499, y: 0.26875004, z: -2.2312498, w: 0.31875} + firstChild: 7209 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.8687499, y: 0.26875004, z: -1.5937499, w: 0.31875} + firstChild: 7217 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 2.8687499, y: 0.90625, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 2.8687499, y: 0.90625, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 3.5062497, y: 0.26875004, z: -2.2312498, w: 0.31875} + firstChild: 7225 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 3.5062497, y: 0.26875004, z: -1.5937499, w: 0.31875} + firstChild: 7233 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + center: {x: 3.5062497, y: 0.90625, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + center: {x: 3.5062497, y: 0.90625, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.8687499, y: 0.26875004, z: -0.95624995, w: 0.31875} + firstChild: 7241 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.8687499, y: 0.26875004, z: -0.31875, w: 0.31875} + firstChild: 7249 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 2.8687499, y: 0.90625, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 2.8687499, y: 0.90625, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 3.5062497, y: 0.26875004, z: -0.95624995, w: 0.31875} + firstChild: 7257 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 3.5062497, y: 0.26875004, z: -0.31875, w: 0.31875} + firstChild: 7265 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + center: {x: 3.5062497, y: 0.90625, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + center: {x: 3.5062497, y: 0.90625, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.26875004, z: -2.2312498, w: 0.31875} + firstChild: 7273 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.26875004, z: -1.5937499, w: 0.31875} + firstChild: 7281 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.90625, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.90625, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.31510916, y: -0.31510878, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.26875004, z: -2.2312498, w: 0.31875} + firstChild: 7289 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.31510878, y: -0.3151088, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.26875004, z: -1.5937499, w: 0.31875} + firstChild: 7297 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.90625, z: -2.2312498, w: 0.31875} + firstChild: 7305 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.90625, z: -1.5937499, w: 0.31875} + firstChild: 7313 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.26875004, z: -0.95624995, w: 0.31875} + firstChild: 7321 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.26875004, z: -0.31875, w: 0.31875} + firstChild: 7329 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.90625, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.90625, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.3151088, y: -0.3151088, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.26875004, z: -0.95624995, w: 0.31875} + firstChild: 7337 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.3151088, y: -0.31510916, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.26875004, z: -0.31875, w: 0.31875} + firstChild: 7345 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.90625, z: -0.95624995, w: 0.31875} + firstChild: 7353 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.90625, z: -0.31875, w: 0.31875} + firstChild: 7361 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 1.5437499, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 1.5437499, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.1812499, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.1812499, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 1.5437499, z: -2.2312498, w: 0.31875} + firstChild: 7369 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 1.5437499, z: -1.5937499, w: 0.31875} + firstChild: 7377 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.1812499, z: -2.2312498, w: 0.31875} + firstChild: 7385 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.1812499, z: -1.5937499, w: 0.31875} + firstChild: 7393 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 1.5437499, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 1.5437499, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.1812499, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.1812499, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 1.5437499, z: -0.95624995, w: 0.31875} + firstChild: 7401 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 1.5437499, z: -0.31875, w: 0.31875} + firstChild: 7409 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.1812499, z: -0.95624995, w: 0.31875} + firstChild: 7417 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.1812499, z: -0.31875, w: 0.31875} + firstChild: 7425 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.31875, y: -1.0062499, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.31875, y: -1.0062499, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.31875, y: -0.36874995, z: 0.31875, w: 0.31875} + firstChild: 7433 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.31875, y: -0.36874995, z: 0.95624995, w: 0.31875} + firstChild: 7441 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.95624995, y: -1.0062499, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.95624995, y: -1.0062499, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.95624995, y: -0.36874995, z: 0.31875, w: 0.31875} + firstChild: 7449 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.95624995, y: -0.36874995, z: 0.95624995, w: 0.31875} + firstChild: 7457 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.31875, y: -1.0062499, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.31875, y: -1.0062499, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.31875, y: -0.36874995, z: 1.5937499, w: 0.31875} + firstChild: 7465 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.31875, y: -0.36874995, z: 2.2312498, w: 0.31875} + firstChild: 7473 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.95624995, y: -1.0062499, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.95624995, y: -1.0062499, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.95624995, y: -0.36874995, z: 1.5937499, w: 0.31875} + firstChild: 7481 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.95624995, y: -0.36874995, z: 2.2312498, w: 0.31875} + firstChild: 7489 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 1.5937499, y: -1.0062499, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 1.5937499, y: -1.0062499, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 1.5937499, y: -0.36874995, z: 0.31875, w: 0.31875} + firstChild: 7497 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 1.5937499, y: -0.36874995, z: 0.95624995, w: 0.31875} + firstChild: 7505 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.2312498, y: -1.0062499, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.2312498, y: -1.0062499, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.2312498, y: -0.36874995, z: 0.31875, w: 0.31875} + firstChild: 7513 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.2312498, y: -0.36874995, z: 0.95624995, w: 0.31875} + firstChild: 7521 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 1.5937499, y: -1.0062499, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 1.5937499, y: -1.0062499, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 1.5937499, y: -0.36874995, z: 1.5937499, w: 0.31875} + firstChild: 7529 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 1.5937499, y: -0.36874995, z: 2.2312498, w: 0.31875} + firstChild: 7537 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.2312498, y: -1.0062499, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.2312498, y: -1.0062499, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.2312498, y: -0.36874995, z: 1.5937499, w: 0.31875} + firstChild: 7545 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.2312498, y: -0.36874995, z: 2.2312498, w: 0.31875} + firstChild: 7553 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.31875, y: -1.0062499, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.31875, y: -1.0062499, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.31875, y: -0.36874995, z: 2.8687499, w: 0.31875} + firstChild: 7561 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.31875, y: -0.36874995, z: 3.5062497, w: 0.31875} + firstChild: 7569 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.95624995, y: -1.0062499, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.95624995, y: -1.0062499, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.95624995, y: -0.36874995, z: 2.8687499, w: 0.31875} + firstChild: 7577 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.95624995, y: -0.36874995, z: 3.5062497, w: 0.31875} + firstChild: 7585 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.31875, y: -1.0062499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.4229817, z: -0.6874999, w: -0.8325089} + distancesB: {x: -1.3249999, y: -1.4229816, z: -0.6874999, w: -0.8325091} + center: {x: 0.31875, y: -1.0062499, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.31875, y: -0.36874995, z: 4.1437497, w: 0.31875} + firstChild: 7593 + - distancesA: {x: -0.6874999, y: -0.8325089, z: -0.049999956, w: -0.31510922} + distancesB: {x: -0.6874999, y: -0.83250916, z: -0.049999956, w: -0.31510964} + center: {x: 0.31875, y: -0.36874995, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 0.95624995, y: -1.0062499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.4229816, z: -0.6874999, w: -0.83250904} + distancesB: {x: -1.3249999, y: -1.4229816, z: -0.6874999, w: -0.8325097} + center: {x: 0.95624995, y: -1.0062499, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 0.95624995, y: -0.36874995, z: 4.1437497, w: 0.31875} + firstChild: 7601 + - distancesA: {x: -0.6874999, y: -0.8325091, z: -0.049999956, w: -0.31510964} + distancesB: {x: -0.6874999, y: -0.83250976, z: -0.049999956, w: -0.315111} + center: {x: 0.95624995, y: -0.36874995, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 1.5937499, y: -1.0062499, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 1.5937499, y: -1.0062499, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 1.5937499, y: -0.36874995, z: 2.8687499, w: 0.31875} + firstChild: 7609 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 1.5937499, y: -0.36874995, z: 3.5062497, w: 0.31875} + firstChild: 7617 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.2312498, y: -1.0062499, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.2312498, y: -1.0062499, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.2312498, y: -0.36874995, z: 2.8687499, w: 0.31875} + firstChild: 7625 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.2312498, y: -0.36874995, z: 3.5062497, w: 0.31875} + firstChild: 7633 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 1.5937499, y: -1.0062499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.4229816, z: -0.6874999, w: -0.83250964} + distancesB: {x: -1.3249999, y: -1.4229817, z: -0.6874999, w: -0.8325105} + center: {x: 1.5937499, y: -1.0062499, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 1.5937499, y: -0.36874995, z: 4.1437497, w: 0.31875} + firstChild: 7641 + - distancesA: {x: -0.6874999, y: -0.8325097, z: -0.049999956, w: -0.315111} + distancesB: {x: -0.6874999, y: -0.83251053, z: -0.049999956, w: -0.3151132} + center: {x: 1.5937499, y: -0.36874995, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.2312498, y: -1.0062499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.4229817, z: -0.6874999, w: -0.8325105} + distancesB: {x: -1.3249999, y: -1.4229816, z: -0.6874999, w: -0.8325092} + center: {x: 2.2312498, y: -1.0062499, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.2312498, y: -0.36874995, z: 4.1437497, w: 0.31875} + firstChild: 7649 + - distancesA: {x: -0.6874999, y: -0.83251053, z: -0.049999956, w: -0.3151132} + distancesB: {x: -0.6874999, y: -0.8325093, z: -0.049999956, w: -0.3151098} + center: {x: 2.2312498, y: -0.36874995, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.31875, y: 0.26875004, z: 0.31875, w: 0.31875} + firstChild: 7657 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.31875, y: 0.26875004, z: 0.95624995, w: 0.31875} + firstChild: 7665 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 0.31875, y: 0.90625, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 0.31875, y: 0.90625, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.95624995, y: 0.26875004, z: 0.31875, w: 0.31875} + firstChild: 7673 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.95624995, y: 0.26875004, z: 0.95624995, w: 0.31875} + firstChild: 7681 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 0.95624995, y: 0.90625, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 0.95624995, y: 0.90625, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.31875, y: 0.26875004, z: 1.5937499, w: 0.31875} + firstChild: 7689 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.31875, y: 0.26875004, z: 2.2312498, w: 0.31875} + firstChild: 7697 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 0.31875, y: 0.90625, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 0.31875, y: 0.90625, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.95624995, y: 0.26875004, z: 1.5937499, w: 0.31875} + firstChild: 7705 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.95624995, y: 0.26875004, z: 2.2312498, w: 0.31875} + firstChild: 7713 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 0.95624995, y: 0.90625, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 0.95624995, y: 0.90625, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 1.5937499, y: 0.26875004, z: 0.31875, w: 0.31875} + firstChild: 7721 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 1.5937499, y: 0.26875004, z: 0.95624995, w: 0.31875} + firstChild: 7729 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 1.5937499, y: 0.90625, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 1.5937499, y: 0.90625, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.2312498, y: 0.26875004, z: 0.31875, w: 0.31875} + firstChild: 7737 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.2312498, y: 0.26875004, z: 0.95624995, w: 0.31875} + firstChild: 7745 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 2.2312498, y: 0.90625, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 2.2312498, y: 0.90625, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 1.5937499, y: 0.26875004, z: 1.5937499, w: 0.31875} + firstChild: 7753 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 1.5937499, y: 0.26875004, z: 2.2312498, w: 0.31875} + firstChild: 7761 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 1.5937499, y: 0.90625, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 1.5937499, y: 0.90625, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.2312498, y: 0.26875004, z: 1.5937499, w: 0.31875} + firstChild: 7769 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.2312498, y: 0.26875004, z: 2.2312498, w: 0.31875} + firstChild: 7777 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 2.2312498, y: 0.90625, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 2.2312498, y: 0.90625, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.31875, y: 0.26875004, z: 2.8687499, w: 0.31875} + firstChild: 7785 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.31875, y: 0.26875004, z: 3.5062497, w: 0.31875} + firstChild: 7793 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 0.31875, y: 0.90625, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.1750003} + center: {x: 0.31875, y: 0.90625, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.95624995, y: 0.26875004, z: 2.8687499, w: 0.31875} + firstChild: 7801 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 0.95624995, y: 0.26875004, z: 3.5062497, w: 0.31875} + firstChild: 7809 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 0.95624995, y: 0.90625, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.1750003} + center: {x: 0.95624995, y: 0.90625, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + center: {x: 0.31875, y: 0.26875004, z: 4.1437497, w: 0.31875} + firstChild: 7817 + - distancesA: {x: -0.049999956, y: -0.31510922, z: 0.5375004, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.31510964, z: 0.5375004, w: -0.09999943} + center: {x: 0.31875, y: 0.26875004, z: 4.7812495, w: 0.31875} + firstChild: 7825 + - distancesA: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 0.31875, y: 0.90625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 0.31875, y: 0.90625, z: 4.7812495, w: 0.31875} + firstChild: 7833 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + center: {x: 0.95624995, y: 0.26875004, z: 4.1437497, w: 0.31875} + firstChild: 7841 + - distancesA: {x: -0.049999956, y: -0.31510964, z: 0.5375004, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.315111, z: 0.5375004, w: -0.09999943} + center: {x: 0.95624995, y: 0.26875004, z: 4.7812495, w: 0.31875} + firstChild: 7849 + - distancesA: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 0.95624995, y: 0.90625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 0.95624995, y: 0.90625, z: 4.7812495, w: 0.31875} + firstChild: 7857 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 0.31875, y: 1.5437499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 0.31875, y: 1.5437499, z: 4.7812495, w: 0.31875} + firstChild: 7865 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 0.31875, y: 2.1812499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 0.31875, y: 2.1812499, z: 4.7812495, w: 0.31875} + firstChild: 7873 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 0.95624995, y: 1.5437499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 0.95624995, y: 1.5437499, z: 4.7812495, w: 0.31875} + firstChild: 7881 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 0.95624995, y: 2.1812499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 0.95624995, y: 2.1812499, z: 4.7812495, w: 0.31875} + firstChild: 7889 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 1.5937499, y: 0.26875004, z: 2.8687499, w: 0.31875} + firstChild: 7897 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 1.5937499, y: 0.26875004, z: 3.5062497, w: 0.31875} + firstChild: 7905 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 1.5937499, y: 0.90625, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.1750003} + center: {x: 1.5937499, y: 0.90625, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.2312498, y: 0.26875004, z: 2.8687499, w: 0.31875} + firstChild: 7913 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.2312498, y: 0.26875004, z: 3.5062497, w: 0.31875} + firstChild: 7921 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 2.2312498, y: 0.90625, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.1750003} + center: {x: 2.2312498, y: 0.90625, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + center: {x: 1.5937499, y: 0.26875004, z: 4.1437497, w: 0.31875} + firstChild: 7929 + - distancesA: {x: -0.049999956, y: -0.315111, z: 0.5375004, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.3151132, z: 0.5375004, w: -0.09999943} + center: {x: 1.5937499, y: 0.26875004, z: 4.7812495, w: 0.31875} + firstChild: 7937 + - distancesA: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 1.5937499, y: 0.90625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 1.5937499, y: 0.90625, z: 4.7812495, w: 0.31875} + firstChild: 7945 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + center: {x: 2.2312498, y: 0.26875004, z: 4.1437497, w: 0.31875} + firstChild: 7953 + - distancesA: {x: -0.049999956, y: -0.3151132, z: 0.5375004, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.3151098, z: 0.5375004, w: -0.09999943} + center: {x: 2.2312498, y: 0.26875004, z: 4.7812495, w: 0.31875} + firstChild: 7961 + - distancesA: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 2.2312498, y: 0.90625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 2.2312498, y: 0.90625, z: 4.7812495, w: 0.31875} + firstChild: 7969 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 1.5937499, y: 1.5437499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 1.5937499, y: 1.5437499, z: 4.7812495, w: 0.31875} + firstChild: 7977 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 1.5937499, y: 2.1812499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 1.5937499, y: 2.1812499, z: 4.7812495, w: 0.31875} + firstChild: 7985 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 2.2312498, y: 1.5437499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 2.2312498, y: 1.5437499, z: 4.7812495, w: 0.31875} + firstChild: 7993 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 2.2312498, y: 2.1812499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 2.2312498, y: 2.1812499, z: 4.7812495, w: 0.31875} + firstChild: 8001 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.8687499, y: -1.0062499, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.8687499, y: -1.0062499, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.8687499, y: -0.36874995, z: 0.31875, w: 0.31875} + firstChild: 8009 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.8687499, y: -0.36874995, z: 0.95624995, w: 0.31875} + firstChild: 8017 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 3.5062497, y: -1.0062499, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 3.5062497, y: -1.0062499, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 3.5062497, y: -0.36874995, z: 0.31875, w: 0.31875} + firstChild: 8025 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 3.5062497, y: -0.36874995, z: 0.95624995, w: 0.31875} + firstChild: 8033 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.8687499, y: -1.0062499, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.8687499, y: -1.0062499, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.8687499, y: -0.36874995, z: 1.5937499, w: 0.31875} + firstChild: 8041 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.8687499, y: -0.36874995, z: 2.2312498, w: 0.31875} + firstChild: 8049 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 3.5062497, y: -1.0062499, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 3.5062497, y: -1.0062499, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 3.5062497, y: -0.36874995, z: 1.5937499, w: 0.31875} + firstChild: 8057 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 3.5062497, y: -0.36874995, z: 2.2312498, w: 0.31875} + firstChild: 8065 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 4.1437497, y: -1.0062499, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 4.1437497, y: -1.0062499, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 4.1437497, y: -0.36874995, z: 0.31875, w: 0.31875} + firstChild: 8073 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 4.1437497, y: -0.36874995, z: 0.95624995, w: 0.31875} + firstChild: 8081 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.4229816, y: -1.4229817, z: -0.83250904, w: -0.83250904} + center: {x: 4.7812495, y: -1.0062499, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.4229817, y: -1.422982, z: -0.83250904, w: -0.83250886} + center: {x: 4.7812495, y: -1.0062499, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.83250904, y: -0.83250904, z: -0.31510916, w: -0.31510916} + center: {x: 4.7812495, y: -0.36874995, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.83250904, y: -0.8325089, z: -0.31510916, w: -0.31510916} + center: {x: 4.7812495, y: -0.36874995, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 4.1437497, y: -1.0062499, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 4.1437497, y: -1.0062499, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 4.1437497, y: -0.36874995, z: 1.5937499, w: 0.31875} + firstChild: 8089 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 4.1437497, y: -0.36874995, z: 2.2312498, w: 0.31875} + firstChild: 8097 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.422982, y: -1.4229825, z: -0.83250886, w: -0.83250904} + center: {x: 4.7812495, y: -1.0062499, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.4229825, y: -1.4229819, z: -0.83250904, w: -0.83250886} + center: {x: 4.7812495, y: -1.0062499, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.8325089, y: -0.83250904, z: -0.31510916, w: -0.31510916} + center: {x: 4.7812495, y: -0.36874995, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.83250904, y: -0.8325089, z: -0.31510916, w: -0.31510916} + center: {x: 4.7812495, y: -0.36874995, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.8687499, y: -1.0062499, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.8687499, y: -1.0062499, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.8687499, y: -0.36874995, z: 2.8687499, w: 0.31875} + firstChild: 8105 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.8687499, y: -0.36874995, z: 3.5062497, w: 0.31875} + firstChild: 8113 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 3.5062497, y: -1.0062499, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 3.5062497, y: -1.0062499, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 3.5062497, y: -0.36874995, z: 2.8687499, w: 0.31875} + firstChild: 8121 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 3.5062497, y: -0.36874995, z: 3.5062497, w: 0.31875} + firstChild: 8129 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 2.8687499, y: -1.0062499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.4229816, z: -0.6874999, w: -0.8325092} + distancesB: {x: -1.3249999, y: -1.4229816, z: -0.6874999, w: -0.83250904} + center: {x: 2.8687499, y: -1.0062499, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 2.8687499, y: -0.36874995, z: 4.1437497, w: 0.31875} + firstChild: 8137 + - distancesA: {x: -0.6874999, y: -0.8325093, z: -0.049999956, w: -0.31511} + distancesB: {x: -0.6874999, y: -0.83250904, z: -0.049999956, w: -0.31510964} + center: {x: 2.8687499, y: -0.36874995, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 3.5062497, y: -1.0062499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.4229816, z: -0.6874999, w: -0.83250904} + distancesB: {x: -1.3249999, y: -1.4229817, z: -0.6874999, w: -0.83250886} + center: {x: 3.5062497, y: -1.0062499, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 3.5062497, y: -0.36874995, z: 4.1437497, w: 0.31875} + firstChild: 8145 + - distancesA: {x: -0.6874999, y: -0.83250904, z: -0.049999956, w: -0.31510964} + distancesB: {x: -0.6874999, y: -0.8325089, z: -0.049999956, w: -0.31510893} + center: {x: 3.5062497, y: -0.36874995, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 4.1437497, y: -1.0062499, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 4.1437497, y: -1.0062499, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 4.1437497, y: -0.36874995, z: 2.8687499, w: 0.31875} + firstChild: 8153 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 4.1437497, y: -0.36874995, z: 3.5062497, w: 0.31875} + firstChild: 8161 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.4229816, y: -1.4229816, z: -0.83250886, w: -0.83250886} + center: {x: 4.7812495, y: -1.0062499, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.4229816, y: -1.4229816, z: -0.83250886, w: -0.83250904} + center: {x: 4.7812495, y: -1.0062499, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.8325089, y: -0.8325089, z: -0.31510916, w: -0.31510916} + center: {x: 4.7812495, y: -0.36874995, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.8325089, y: -0.83250904, z: -0.31510916, w: -0.31510916} + center: {x: 4.7812495, y: -0.36874995, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + center: {x: 4.1437497, y: -1.0062499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.4229817, z: -0.6874999, w: -0.83250886} + distancesB: {x: -1.3249999, y: -1.4229816, z: -0.6874999, w: -0.83250904} + center: {x: 4.1437497, y: -1.0062499, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + center: {x: 4.1437497, y: -0.36874995, z: 4.1437497, w: 0.31875} + firstChild: 8169 + - distancesA: {x: -0.6874999, y: -0.8325089, z: -0.049999956, w: -0.31510893} + distancesB: {x: -0.6874999, y: -0.83250904, z: -0.049999956, w: -0.31510916} + center: {x: 4.1437497, y: -0.36874995, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.3249999, z: -0.6874999, w: -0.6874999} + distancesB: {x: -1.4229816, y: -1.4229816, z: -0.83250904, w: -0.83250886} + center: {x: 4.7812495, y: -1.0062499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -1.3249999, y: -1.4229816, z: -0.6874999, w: -0.83250904} + distancesB: {x: -1.4229816, y: -1.5167226, z: -0.83250886, w: -0.9615866} + center: {x: 4.7812495, y: -1.0062499, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.83250904, y: -0.8325089, z: -0.31510916, w: -0.31510916} + center: {x: 4.7812495, y: -0.36874995, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.83250904, z: -0.049999956, w: -0.31510916} + distancesB: {x: -0.8325089, y: -0.96158665, z: -0.31510916, w: -0.51686233} + center: {x: 4.7812495, y: -0.36874995, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.8687499, y: 0.26875004, z: 0.31875, w: 0.31875} + firstChild: 8177 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.8687499, y: 0.26875004, z: 0.95624995, w: 0.31875} + firstChild: 8185 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 2.8687499, y: 0.90625, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 2.8687499, y: 0.90625, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 3.5062497, y: 0.26875004, z: 0.31875, w: 0.31875} + firstChild: 8193 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 3.5062497, y: 0.26875004, z: 0.95624995, w: 0.31875} + firstChild: 8201 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + center: {x: 3.5062497, y: 0.90625, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + center: {x: 3.5062497, y: 0.90625, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.8687499, y: 0.26875004, z: 1.5937499, w: 0.31875} + firstChild: 8209 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.8687499, y: 0.26875004, z: 2.2312498, w: 0.31875} + firstChild: 8217 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 2.8687499, y: 0.90625, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 2.8687499, y: 0.90625, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 3.5062497, y: 0.26875004, z: 1.5937499, w: 0.31875} + firstChild: 8225 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 3.5062497, y: 0.26875004, z: 2.2312498, w: 0.31875} + firstChild: 8233 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + center: {x: 3.5062497, y: 0.90625, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + center: {x: 3.5062497, y: 0.90625, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.26875004, z: 0.31875, w: 0.31875} + firstChild: 8241 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.26875004, z: 0.95624995, w: 0.31875} + firstChild: 8249 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.90625, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.90625, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.31510916, y: -0.31510916, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.26875004, z: 0.31875, w: 0.31875} + firstChild: 8257 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.31510916, y: -0.31510916, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.26875004, z: 0.95624995, w: 0.31875} + firstChild: 8265 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.90625, z: 0.31875, w: 0.31875} + firstChild: 8273 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.90625, z: 0.95624995, w: 0.31875} + firstChild: 8281 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.26875004, z: 1.5937499, w: 0.31875} + firstChild: 8289 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.26875004, z: 2.2312498, w: 0.31875} + firstChild: 8297 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.90625, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.90625, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.31510916, y: -0.31510916, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.26875004, z: 1.5937499, w: 0.31875} + firstChild: 8305 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.31510916, y: -0.31510916, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.26875004, z: 2.2312498, w: 0.31875} + firstChild: 8313 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.90625, z: 1.5937499, w: 0.31875} + firstChild: 8321 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.90625, z: 2.2312498, w: 0.31875} + firstChild: 8329 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 1.5437499, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 1.5437499, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.1812499, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.1812499, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 1.5437499, z: 0.31875, w: 0.31875} + firstChild: 8337 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 1.5437499, z: 0.95624995, w: 0.31875} + firstChild: 8345 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.1812499, z: 0.31875, w: 0.31875} + firstChild: 8353 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.1812499, z: 0.95624995, w: 0.31875} + firstChild: 8361 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 1.5437499, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 1.5437499, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.1812499, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.1812499, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 1.5437499, z: 1.5937499, w: 0.31875} + firstChild: 8369 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 1.5437499, z: 2.2312498, w: 0.31875} + firstChild: 8377 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.1812499, z: 1.5937499, w: 0.31875} + firstChild: 8385 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.1812499, z: 2.2312498, w: 0.31875} + firstChild: 8393 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.8687499, y: 0.26875004, z: 2.8687499, w: 0.31875} + firstChild: 8401 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 2.8687499, y: 0.26875004, z: 3.5062497, w: 0.31875} + firstChild: 8409 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + center: {x: 2.8687499, y: 0.90625, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.1750003} + center: {x: 2.8687499, y: 0.90625, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 3.5062497, y: 0.26875004, z: 2.8687499, w: 0.31875} + firstChild: 8417 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + center: {x: 3.5062497, y: 0.26875004, z: 3.5062497, w: 0.31875} + firstChild: 8425 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.225} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + center: {x: 3.5062497, y: 0.90625, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.225, w: 1.1750003} + distancesB: {x: 0.5875, y: 0.5875, z: 1.1750003, w: 1.1750003} + center: {x: 3.5062497, y: 0.90625, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + center: {x: 2.8687499, y: 0.26875004, z: 4.1437497, w: 0.31875} + firstChild: 8433 + - distancesA: {x: -0.049999956, y: -0.31511, z: 0.5375004, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.31510964, z: 0.5375004, w: -0.09999943} + center: {x: 2.8687499, y: 0.26875004, z: 4.7812495, w: 0.31875} + firstChild: 8441 + - distancesA: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 2.8687499, y: 0.90625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 2.8687499, y: 0.90625, z: 4.7812495, w: 0.31875} + firstChild: 8449 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + center: {x: 3.5062497, y: 0.26875004, z: 4.1437497, w: 0.31875} + firstChild: 8457 + - distancesA: {x: -0.049999956, y: -0.31510964, z: 0.5375004, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.31510893, z: 0.5375004, w: -0.09999943} + center: {x: 3.5062497, y: 0.26875004, z: 4.7812495, w: 0.31875} + firstChild: 8465 + - distancesA: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 3.5062497, y: 0.90625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 3.5062497, y: 0.90625, z: 4.7812495, w: 0.31875} + firstChild: 8473 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 2.8687499, y: 1.5437499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 2.8687499, y: 1.5437499, z: 4.7812495, w: 0.31875} + firstChild: 8481 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 2.8687499, y: 2.1812499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 2.8687499, y: 2.1812499, z: 4.7812495, w: 0.31875} + firstChild: 8489 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 3.5062497, y: 1.5437499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 3.5062497, y: 1.5437499, z: 4.7812495, w: 0.31875} + firstChild: 8497 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 3.5062497, y: 2.1812499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 3.5062497, y: 2.1812499, z: 4.7812495, w: 0.31875} + firstChild: 8505 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.26875004, z: 2.8687499, w: 0.31875} + firstChild: 8513 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5875} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.26875004, z: 3.5062497, w: 0.31875} + firstChild: 8521 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.90625, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5875, y: 0.5875, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.90625, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.31510916, y: -0.31510916, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.26875004, z: 2.8687499, w: 0.31875} + firstChild: 8529 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.31510916, y: -0.31510916, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.26875004, z: 3.5062497, w: 0.31875} + firstChild: 8537 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.90625, z: 2.8687499, w: 0.31875} + firstChild: 8545 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.90625, z: 3.5062497, w: 0.31875} + firstChild: 8553 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5875, w: 0.5375004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.26875004, z: 4.1437497, w: 0.31875} + firstChild: 8561 + - distancesA: {x: -0.049999956, y: -0.31510893, z: 0.5375004, w: -0.09999943} + distancesB: {x: -0.049999956, y: -0.31510916, z: 0.5375004, w: -0.09999943} + center: {x: 4.1437497, y: 0.26875004, z: 4.7812495, w: 0.31875} + firstChild: 8569 + - distancesA: {x: 0.5875, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 0.90625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 4.1437497, y: 0.90625, z: 4.7812495, w: 0.31875} + firstChild: 8577 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.31510916, y: -0.31510916, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.26875004, z: 4.1437497, w: 0.31875} + firstChild: 8585 + - distancesA: {x: -0.049999956, y: -0.31510916, z: 0.5375004, w: -0.09999943} + distancesB: {x: -0.31510916, y: -0.51686233, z: -0.09999943, w: -0.34850657} + center: {x: 4.7812495, y: 0.26875004, z: 4.7812495, w: 0.31875} + firstChild: 8593 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 0.90625, z: 4.1437497, w: 0.31875} + firstChild: 8601 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: -0.09999943, y: -0.34850657, z: -0.09999943, w: -0.34850657} + center: {x: 4.7812495, y: 0.90625, z: 4.7812495, w: 0.31875} + firstChild: 8609 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 1.5437499, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 1.5437499, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.1812499, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.1812499, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 1.5437499, z: 2.8687499, w: 0.31875} + firstChild: 8617 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 1.5437499, z: 3.5062497, w: 0.31875} + firstChild: 8625 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.1812499, z: 2.8687499, w: 0.31875} + firstChild: 8633 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.1812499, z: 3.5062497, w: 0.31875} + firstChild: 8641 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 1.5437499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 4.1437497, y: 1.5437499, z: 4.7812495, w: 0.31875} + firstChild: 8649 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.1812499, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 4.1437497, y: 2.1812499, z: 4.7812495, w: 0.31875} + firstChild: 8657 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 1.5437499, z: 4.1437497, w: 0.31875} + firstChild: 8665 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: -0.09999943, y: -0.34850657, z: -0.09999943, w: -0.34850657} + center: {x: 4.7812495, y: 1.5437499, z: 4.7812495, w: 0.31875} + firstChild: 8673 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.1812499, z: 4.1437497, w: 0.31875} + firstChild: 8681 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: -0.09999943, y: -0.34850657, z: -0.09999943, w: -0.34850657} + center: {x: 4.7812495, y: 2.1812499, z: 4.7812495, w: 0.31875} + firstChild: 8689 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 0.31875, y: 2.8187501, z: -4.7812495, w: 0.31875} + firstChild: 8697 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 0.31875, y: 2.8187501, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 0.31875, y: 3.45625, z: -4.7812495, w: 0.31875} + firstChild: 8705 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 0.31875, y: 3.45625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 0.95624995, y: 2.8187501, z: -4.7812495, w: 0.31875} + firstChild: 8713 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 0.95624995, y: 2.8187501, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 0.95624995, y: 3.45625, z: -4.7812495, w: 0.31875} + firstChild: 8721 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 0.95624995, y: 3.45625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 0.31875, y: 4.09375, z: -4.7812495, w: 0.31875} + firstChild: 8729 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 0.31875, y: 4.09375, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + center: {x: 0.31875, y: 4.73125, z: -4.7812495, w: 0.31875} + firstChild: 8737 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + center: {x: 0.31875, y: 4.73125, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 0.95624995, y: 4.09375, z: -4.7812495, w: 0.31875} + firstChild: 8745 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 0.95624995, y: 4.09375, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + center: {x: 0.95624995, y: 4.73125, z: -4.7812495, w: 0.31875} + firstChild: 8753 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + center: {x: 0.95624995, y: 4.73125, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 1.5937499, y: 2.8187501, z: -4.7812495, w: 0.31875} + firstChild: 8761 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 1.5937499, y: 2.8187501, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 1.5937499, y: 3.45625, z: -4.7812495, w: 0.31875} + firstChild: 8769 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 1.5937499, y: 3.45625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 2.2312498, y: 2.8187501, z: -4.7812495, w: 0.31875} + firstChild: 8777 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 2.2312498, y: 2.8187501, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 2.2312498, y: 3.45625, z: -4.7812495, w: 0.31875} + firstChild: 8785 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 2.2312498, y: 3.45625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 1.5937499, y: 4.09375, z: -4.7812495, w: 0.31875} + firstChild: 8793 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 1.5937499, y: 4.09375, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + center: {x: 1.5937499, y: 4.73125, z: -4.7812495, w: 0.31875} + firstChild: 8801 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + center: {x: 1.5937499, y: 4.73125, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 2.2312498, y: 4.09375, z: -4.7812495, w: 0.31875} + firstChild: 8809 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 2.2312498, y: 4.09375, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + center: {x: 2.2312498, y: 4.73125, z: -4.7812495, w: 0.31875} + firstChild: 8817 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + center: {x: 2.2312498, y: 4.73125, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + distancesB: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + center: {x: 0.31875, y: 5.3687506, z: -4.7812495, w: 0.31875} + firstChild: 8825 + - distancesA: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + distancesB: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + center: {x: 0.31875, y: 5.3687506, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + distancesB: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + center: {x: 0.31875, y: 6.0062504, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + distancesB: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + center: {x: 0.31875, y: 6.0062504, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + distancesB: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + center: {x: 0.95624995, y: 5.3687506, z: -4.7812495, w: 0.31875} + firstChild: 8833 + - distancesA: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + distancesB: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + center: {x: 0.95624995, y: 5.3687506, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + distancesB: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + center: {x: 0.95624995, y: 6.0062504, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + distancesB: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + center: {x: 0.95624995, y: 6.0062504, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + distancesB: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + center: {x: 1.5937499, y: 5.3687506, z: -4.7812495, w: 0.31875} + firstChild: 8841 + - distancesA: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + distancesB: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + center: {x: 1.5937499, y: 5.3687506, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + distancesB: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + center: {x: 1.5937499, y: 6.0062504, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + distancesB: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + center: {x: 1.5937499, y: 6.0062504, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + distancesB: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + center: {x: 2.2312498, y: 5.3687506, z: -4.7812495, w: 0.31875} + firstChild: 8849 + - distancesA: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + distancesB: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + center: {x: 2.2312498, y: 5.3687506, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + distancesB: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + center: {x: 2.2312498, y: 6.0062504, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + distancesB: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + center: {x: 2.2312498, y: 6.0062504, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 2.8687499, y: 2.8187501, z: -4.7812495, w: 0.31875} + firstChild: 8857 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 2.8687499, y: 2.8187501, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 2.8687499, y: 3.45625, z: -4.7812495, w: 0.31875} + firstChild: 8865 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 2.8687499, y: 3.45625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 3.5062497, y: 2.8187501, z: -4.7812495, w: 0.31875} + firstChild: 8873 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 3.5062497, y: 2.8187501, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 3.5062497, y: 3.45625, z: -4.7812495, w: 0.31875} + firstChild: 8881 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 3.5062497, y: 3.45625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 2.8687499, y: 4.09375, z: -4.7812495, w: 0.31875} + firstChild: 8889 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 2.8687499, y: 4.09375, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + center: {x: 2.8687499, y: 4.73125, z: -4.7812495, w: 0.31875} + firstChild: 8897 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + center: {x: 2.8687499, y: 4.73125, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 3.5062497, y: 4.09375, z: -4.7812495, w: 0.31875} + firstChild: 8905 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + center: {x: 3.5062497, y: 4.09375, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + center: {x: 3.5062497, y: 4.73125, z: -4.7812495, w: 0.31875} + firstChild: 8913 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + distancesB: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + center: {x: 3.5062497, y: 4.73125, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 4.1437497, y: 2.8187501, z: -4.7812495, w: 0.31875} + firstChild: 8921 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.8187501, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 4.1437497, y: 3.45625, z: -4.7812495, w: 0.31875} + firstChild: 8929 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 3.45625, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.34850657, y: -0.09999943, z: -0.34850657, w: -0.09999943} + center: {x: 4.7812495, y: 2.8187501, z: -4.7812495, w: 0.31875} + firstChild: 8937 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.8187501, z: -4.1437497, w: 0.31875} + firstChild: 8945 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.34850657, y: -0.09999943, z: -0.34850657, w: -0.09999943} + center: {x: 4.7812495, y: 3.45625, z: -4.7812495, w: 0.31875} + firstChild: 8953 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 3.45625, z: -4.1437497, w: 0.31875} + firstChild: 8961 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.8187501, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.8187501, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 3.45625, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 3.45625, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.8187501, z: -3.5062497, w: 0.31875} + firstChild: 8969 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.8187501, z: -2.8687499, w: 0.31875} + firstChild: 8977 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 3.45625, z: -3.5062497, w: 0.31875} + firstChild: 8985 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 3.45625, z: -2.8687499, w: 0.31875} + firstChild: 8993 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + center: {x: 4.1437497, y: 4.09375, z: -4.7812495, w: 0.31875} + firstChild: 9001 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5375004, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 4.09375, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + distancesB: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + center: {x: 4.1437497, y: 4.73125, z: -4.7812495, w: 0.31875} + firstChild: 9009 + - distancesA: {x: 0.5375004, y: 1.1750002, z: 0.5398209, w: 1.1760635} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: 4.1437497, y: 4.73125, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.09999943, w: 0.5375004} + distancesB: {x: -0.34850657, y: -0.09999943, z: -0.34850657, w: -0.09999943} + center: {x: 4.7812495, y: 4.09375, z: -4.7812495, w: 0.31875} + firstChild: 9017 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 4.09375, z: -4.1437497, w: 0.31875} + firstChild: 9025 + - distancesA: {x: -0.09999943, y: 0.5375004, z: -0.11180276, w: 0.5398209} + distancesB: {x: -0.34850657, y: -0.09999943, z: -0.35207498, w: -0.11180276} + center: {x: 4.7812495, y: 4.73125, z: -4.7812495, w: 0.31875} + firstChild: 9033 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + center: {x: 4.7812495, y: 4.73125, z: -4.1437497, w: 0.31875} + firstChild: 9041 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 4.09375, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 4.09375, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: 4.1437497, y: 4.73125, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: 4.1437497, y: 4.73125, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 4.09375, z: -3.5062497, w: 0.31875} + firstChild: 9049 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 4.09375, z: -2.8687499, w: 0.31875} + firstChild: 9057 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + center: {x: 4.7812495, y: 4.73125, z: -3.5062497, w: 0.31875} + firstChild: 9065 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + center: {x: 4.7812495, y: 4.73125, z: -2.8687499, w: 0.31875} + firstChild: 9073 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.8187501, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.8187501, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 3.45625, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 3.45625, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.8187501, z: -2.2312498, w: 0.31875} + firstChild: 9081 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.8187501, z: -1.5937499, w: 0.31875} + firstChild: 9089 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 3.45625, z: -2.2312498, w: 0.31875} + firstChild: 9097 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 3.45625, z: -1.5937499, w: 0.31875} + firstChild: 9105 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.8187501, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.8187501, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 3.45625, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 3.45625, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.8187501, z: -0.95624995, w: 0.31875} + firstChild: 9113 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.8187501, z: -0.31875, w: 0.31875} + firstChild: 9121 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 3.45625, z: -0.95624995, w: 0.31875} + firstChild: 9129 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 3.45625, z: -0.31875, w: 0.31875} + firstChild: 9137 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 4.09375, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 4.09375, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: 4.1437497, y: 4.73125, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: 4.1437497, y: 4.73125, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 4.09375, z: -2.2312498, w: 0.31875} + firstChild: 9145 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 4.09375, z: -1.5937499, w: 0.31875} + firstChild: 9153 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + center: {x: 4.7812495, y: 4.73125, z: -2.2312498, w: 0.31875} + firstChild: 9161 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + center: {x: 4.7812495, y: 4.73125, z: -1.5937499, w: 0.31875} + firstChild: 9169 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 4.09375, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 4.09375, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: 4.1437497, y: 4.73125, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: 4.1437497, y: 4.73125, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 4.09375, z: -0.95624995, w: 0.31875} + firstChild: 9177 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 4.09375, z: -0.31875, w: 0.31875} + firstChild: 9185 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + center: {x: 4.7812495, y: 4.73125, z: -0.95624995, w: 0.31875} + firstChild: 9193 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + center: {x: 4.7812495, y: 4.73125, z: -0.31875, w: 0.31875} + firstChild: 9201 + - distancesA: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + distancesB: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + center: {x: 2.8687499, y: 5.3687506, z: -4.7812495, w: 0.31875} + firstChild: 9209 + - distancesA: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + distancesB: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + center: {x: 2.8687499, y: 5.3687506, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + distancesB: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + center: {x: 2.8687499, y: 6.0062504, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + distancesB: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + center: {x: 2.8687499, y: 6.0062504, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + distancesB: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + center: {x: 3.5062497, y: 5.3687506, z: -4.7812495, w: 0.31875} + firstChild: 9217 + - distancesA: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + distancesB: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + center: {x: 3.5062497, y: 5.3687506, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + distancesB: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + center: {x: 3.5062497, y: 6.0062504, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + distancesB: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + center: {x: 3.5062497, y: 6.0062504, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + distancesB: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + center: {x: 4.1437497, y: 5.3687506, z: -4.7812495, w: 0.31875} + firstChild: 9225 + - distancesA: {x: 0.539821, y: 1.1760635, z: 0.8726761, w: 1.3613532} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: 4.1437497, y: 5.3687506, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + distancesB: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + center: {x: 4.1437497, y: 6.0062504, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 1.3613532, z: 1.4298714, w: 1.7709464} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: 4.1437497, y: 6.0062504, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.11180318, y: 0.539821, z: -0.69473505, w: 0.8726761} + distancesB: {x: -0.3520751, y: -0.11180318, z: -0.77078766, w: -0.69473505} + center: {x: 4.7812495, y: 5.3687506, z: -4.7812495, w: 0.31875} + firstChild: 9233 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + center: {x: 4.7812495, y: 5.3687506, z: -4.1437497, w: 0.31875} + firstChild: 9241 + - distancesA: {x: -0.69473505, y: 0.8726761, z: -1.3287684, w: 1.4298714} + distancesB: {x: -0.77078766, y: -0.69473505, z: -1.3700666, w: -1.3287684} + center: {x: 4.7812495, y: 6.0062504, z: -4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + center: {x: 4.7812495, y: 6.0062504, z: -4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: 4.1437497, y: 5.3687506, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: 4.1437497, y: 5.3687506, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: 4.1437497, y: 6.0062504, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: 4.1437497, y: 6.0062504, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + center: {x: 4.7812495, y: 5.3687506, z: -3.5062497, w: 0.31875} + firstChild: 9249 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + center: {x: 4.7812495, y: 5.3687506, z: -2.8687499, w: 0.31875} + firstChild: 9257 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + center: {x: 4.7812495, y: 6.0062504, z: -3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + center: {x: 4.7812495, y: 6.0062504, z: -2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: 4.1437497, y: 5.3687506, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: 4.1437497, y: 5.3687506, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: 4.1437497, y: 6.0062504, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: 4.1437497, y: 6.0062504, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + center: {x: 4.7812495, y: 5.3687506, z: -2.2312498, w: 0.31875} + firstChild: 9265 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + center: {x: 4.7812495, y: 5.3687506, z: -1.5937499, w: 0.31875} + firstChild: 9273 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + center: {x: 4.7812495, y: 6.0062504, z: -2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + center: {x: 4.7812495, y: 6.0062504, z: -1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: 4.1437497, y: 5.3687506, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: 4.1437497, y: 5.3687506, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: 4.1437497, y: 6.0062504, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: 4.1437497, y: 6.0062504, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + center: {x: 4.7812495, y: 5.3687506, z: -0.95624995, w: 0.31875} + firstChild: 9281 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + center: {x: 4.7812495, y: 5.3687506, z: -0.31875, w: 0.31875} + firstChild: 9289 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + center: {x: 4.7812495, y: 6.0062504, z: -0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + center: {x: 4.7812495, y: 6.0062504, z: -0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 0.31875, y: 2.8187501, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 0.31875, y: 2.8187501, z: 4.7812495, w: 0.31875} + firstChild: 9297 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 0.31875, y: 3.45625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 0.31875, y: 3.45625, z: 4.7812495, w: 0.31875} + firstChild: 9305 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 0.95624995, y: 2.8187501, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 0.95624995, y: 2.8187501, z: 4.7812495, w: 0.31875} + firstChild: 9313 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 0.95624995, y: 3.45625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 0.95624995, y: 3.45625, z: 4.7812495, w: 0.31875} + firstChild: 9321 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 0.31875, y: 4.09375, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 0.31875, y: 4.09375, z: 4.7812495, w: 0.31875} + firstChild: 9329 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + center: {x: 0.31875, y: 4.73125, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + center: {x: 0.31875, y: 4.73125, z: 4.7812495, w: 0.31875} + firstChild: 9337 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 0.95624995, y: 4.09375, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 0.95624995, y: 4.09375, z: 4.7812495, w: 0.31875} + firstChild: 9345 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + center: {x: 0.95624995, y: 4.73125, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + center: {x: 0.95624995, y: 4.73125, z: 4.7812495, w: 0.31875} + firstChild: 9353 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 1.5937499, y: 2.8187501, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 1.5937499, y: 2.8187501, z: 4.7812495, w: 0.31875} + firstChild: 9361 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 1.5937499, y: 3.45625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 1.5937499, y: 3.45625, z: 4.7812495, w: 0.31875} + firstChild: 9369 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 2.2312498, y: 2.8187501, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 2.2312498, y: 2.8187501, z: 4.7812495, w: 0.31875} + firstChild: 9377 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 2.2312498, y: 3.45625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 2.2312498, y: 3.45625, z: 4.7812495, w: 0.31875} + firstChild: 9385 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 1.5937499, y: 4.09375, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 1.5937499, y: 4.09375, z: 4.7812495, w: 0.31875} + firstChild: 9393 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + center: {x: 1.5937499, y: 4.73125, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + center: {x: 1.5937499, y: 4.73125, z: 4.7812495, w: 0.31875} + firstChild: 9401 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 2.2312498, y: 4.09375, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 2.2312498, y: 4.09375, z: 4.7812495, w: 0.31875} + firstChild: 9409 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + center: {x: 2.2312498, y: 4.73125, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + center: {x: 2.2312498, y: 4.73125, z: 4.7812495, w: 0.31875} + firstChild: 9417 + - distancesA: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + distancesB: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + center: {x: 0.31875, y: 5.3687506, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + distancesB: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + center: {x: 0.31875, y: 5.3687506, z: 4.7812495, w: 0.31875} + firstChild: 9425 + - distancesA: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + distancesB: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + center: {x: 0.31875, y: 6.0062504, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + distancesB: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + center: {x: 0.31875, y: 6.0062504, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + distancesB: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + center: {x: 0.95624995, y: 5.3687506, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + distancesB: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + center: {x: 0.95624995, y: 5.3687506, z: 4.7812495, w: 0.31875} + firstChild: 9433 + - distancesA: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + distancesB: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + center: {x: 0.95624995, y: 6.0062504, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + distancesB: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + center: {x: 0.95624995, y: 6.0062504, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + distancesB: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + center: {x: 1.5937499, y: 5.3687506, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + distancesB: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + center: {x: 1.5937499, y: 5.3687506, z: 4.7812495, w: 0.31875} + firstChild: 9441 + - distancesA: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + distancesB: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + center: {x: 1.5937499, y: 6.0062504, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + distancesB: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + center: {x: 1.5937499, y: 6.0062504, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + distancesB: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + center: {x: 2.2312498, y: 5.3687506, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + distancesB: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + center: {x: 2.2312498, y: 5.3687506, z: 4.7812495, w: 0.31875} + firstChild: 9449 + - distancesA: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + distancesB: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + center: {x: 2.2312498, y: 6.0062504, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + distancesB: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + center: {x: 2.2312498, y: 6.0062504, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.8187501, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.8187501, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 3.45625, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 3.45625, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.8187501, z: 0.31875, w: 0.31875} + firstChild: 9457 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.8187501, z: 0.95624995, w: 0.31875} + firstChild: 9465 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 3.45625, z: 0.31875, w: 0.31875} + firstChild: 9473 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 3.45625, z: 0.95624995, w: 0.31875} + firstChild: 9481 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.8187501, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.8187501, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 3.45625, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 3.45625, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.8187501, z: 1.5937499, w: 0.31875} + firstChild: 9489 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.8187501, z: 2.2312498, w: 0.31875} + firstChild: 9497 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 3.45625, z: 1.5937499, w: 0.31875} + firstChild: 9505 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 3.45625, z: 2.2312498, w: 0.31875} + firstChild: 9513 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 4.09375, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 4.09375, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: 4.1437497, y: 4.73125, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: 4.1437497, y: 4.73125, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 4.09375, z: 0.31875, w: 0.31875} + firstChild: 9521 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 4.09375, z: 0.95624995, w: 0.31875} + firstChild: 9529 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + center: {x: 4.7812495, y: 4.73125, z: 0.31875, w: 0.31875} + firstChild: 9537 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + center: {x: 4.7812495, y: 4.73125, z: 0.95624995, w: 0.31875} + firstChild: 9545 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 4.09375, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 4.09375, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: 4.1437497, y: 4.73125, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: 4.1437497, y: 4.73125, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 4.09375, z: 1.5937499, w: 0.31875} + firstChild: 9553 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 4.09375, z: 2.2312498, w: 0.31875} + firstChild: 9561 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + center: {x: 4.7812495, y: 4.73125, z: 1.5937499, w: 0.31875} + firstChild: 9569 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + center: {x: 4.7812495, y: 4.73125, z: 2.2312498, w: 0.31875} + firstChild: 9577 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 2.8687499, y: 2.8187501, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 2.8687499, y: 2.8187501, z: 4.7812495, w: 0.31875} + firstChild: 9585 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 2.8687499, y: 3.45625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 2.8687499, y: 3.45625, z: 4.7812495, w: 0.31875} + firstChild: 9593 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 3.5062497, y: 2.8187501, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 3.5062497, y: 2.8187501, z: 4.7812495, w: 0.31875} + firstChild: 9601 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 3.5062497, y: 3.45625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 3.5062497, y: 3.45625, z: 4.7812495, w: 0.31875} + firstChild: 9609 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 2.8687499, y: 4.09375, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 2.8687499, y: 4.09375, z: 4.7812495, w: 0.31875} + firstChild: 9617 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + center: {x: 2.8687499, y: 4.73125, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + center: {x: 2.8687499, y: 4.73125, z: 4.7812495, w: 0.31875} + firstChild: 9625 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + center: {x: 3.5062497, y: 4.09375, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 3.5062497, y: 4.09375, z: 4.7812495, w: 0.31875} + firstChild: 9633 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + distancesB: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + center: {x: 3.5062497, y: 4.73125, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + center: {x: 3.5062497, y: 4.73125, z: 4.7812495, w: 0.31875} + firstChild: 9641 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.8187501, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.8187501, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 3.45625, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 3.45625, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.8187501, z: 2.8687499, w: 0.31875} + firstChild: 9649 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.8187501, z: 3.5062497, w: 0.31875} + firstChild: 9657 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 3.45625, z: 2.8687499, w: 0.31875} + firstChild: 9665 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 3.45625, z: 3.5062497, w: 0.31875} + firstChild: 9673 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 2.8187501, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 4.1437497, y: 2.8187501, z: 4.7812495, w: 0.31875} + firstChild: 9681 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 3.45625, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 4.1437497, y: 3.45625, z: 4.7812495, w: 0.31875} + firstChild: 9689 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 2.8187501, z: 4.1437497, w: 0.31875} + firstChild: 9697 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: -0.09999943, y: -0.34850657, z: -0.09999943, w: -0.34850657} + center: {x: 4.7812495, y: 2.8187501, z: 4.7812495, w: 0.31875} + firstChild: 9705 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 3.45625, z: 4.1437497, w: 0.31875} + firstChild: 9713 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: -0.09999943, y: -0.34850657, z: -0.09999943, w: -0.34850657} + center: {x: 4.7812495, y: 3.45625, z: 4.7812495, w: 0.31875} + firstChild: 9721 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 4.09375, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1750002, w: 1.1750002} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 4.09375, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: 4.1437497, y: 4.73125, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1750002, y: 1.1750002, z: 1.1760635, w: 1.1760635} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: 4.1437497, y: 4.73125, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 4.09375, z: 2.8687499, w: 0.31875} + firstChild: 9729 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 4.09375, z: 3.5062497, w: 0.31875} + firstChild: 9737 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + center: {x: 4.7812495, y: 4.73125, z: 2.8687499, w: 0.31875} + firstChild: 9745 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + center: {x: 4.7812495, y: 4.73125, z: 3.5062497, w: 0.31875} + firstChild: 9753 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1750002, w: 0.5375004} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + center: {x: 4.1437497, y: 4.09375, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + center: {x: 4.1437497, y: 4.09375, z: 4.7812495, w: 0.31875} + firstChild: 9761 + - distancesA: {x: 1.1750002, y: 0.5375004, z: 1.1760635, w: 0.5398209} + distancesB: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + center: {x: 4.1437497, y: 4.73125, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + distancesB: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + center: {x: 4.1437497, y: 4.73125, z: 4.7812495, w: 0.31875} + firstChild: 9769 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5375004, w: 0.5375004} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.09999943, w: -0.09999943} + center: {x: 4.7812495, y: 4.09375, z: 4.1437497, w: 0.31875} + firstChild: 9777 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5375004, w: -0.09999943} + distancesB: {x: -0.09999943, y: -0.34850657, z: -0.09999943, w: -0.34850657} + center: {x: 4.7812495, y: 4.09375, z: 4.7812495, w: 0.31875} + firstChild: 9785 + - distancesA: {x: 0.5375004, y: 0.5375004, z: 0.5398209, w: 0.5398209} + distancesB: {x: -0.09999943, y: -0.09999943, z: -0.11180276, w: -0.11180276} + center: {x: 4.7812495, y: 4.73125, z: 4.1437497, w: 0.31875} + firstChild: 9793 + - distancesA: {x: 0.5375004, y: -0.09999943, z: 0.5398209, w: -0.11180276} + distancesB: {x: -0.09999943, y: -0.34850657, z: -0.11180276, w: -0.35207498} + center: {x: 4.7812495, y: 4.73125, z: 4.7812495, w: 0.31875} + firstChild: 9801 + - distancesA: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: 4.1437497, y: 5.3687506, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: 4.1437497, y: 5.3687506, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: 4.1437497, y: 6.0062504, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: 4.1437497, y: 6.0062504, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + center: {x: 4.7812495, y: 5.3687506, z: 0.31875, w: 0.31875} + firstChild: 9809 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + center: {x: 4.7812495, y: 5.3687506, z: 0.95624995, w: 0.31875} + firstChild: 9817 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + center: {x: 4.7812495, y: 6.0062504, z: 0.31875, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + center: {x: 4.7812495, y: 6.0062504, z: 0.95624995, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: 4.1437497, y: 5.3687506, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: 4.1437497, y: 5.3687506, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: 4.1437497, y: 6.0062504, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: 4.1437497, y: 6.0062504, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + center: {x: 4.7812495, y: 5.3687506, z: 1.5937499, w: 0.31875} + firstChild: 9825 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + center: {x: 4.7812495, y: 5.3687506, z: 2.2312498, w: 0.31875} + firstChild: 9833 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + center: {x: 4.7812495, y: 6.0062504, z: 1.5937499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + center: {x: 4.7812495, y: 6.0062504, z: 2.2312498, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + distancesB: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + center: {x: 2.8687499, y: 5.3687506, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + distancesB: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + center: {x: 2.8687499, y: 5.3687506, z: 4.7812495, w: 0.31875} + firstChild: 9841 + - distancesA: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + distancesB: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + center: {x: 2.8687499, y: 6.0062504, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + distancesB: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + center: {x: 2.8687499, y: 6.0062504, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + distancesB: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + center: {x: 3.5062497, y: 5.3687506, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + distancesB: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + center: {x: 3.5062497, y: 5.3687506, z: 4.7812495, w: 0.31875} + firstChild: 9849 + - distancesA: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + distancesB: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + center: {x: 3.5062497, y: 6.0062504, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + distancesB: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + center: {x: 3.5062497, y: 6.0062504, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: 4.1437497, y: 5.3687506, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 1.1760635, z: 1.3613532, w: 1.3613532} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: 4.1437497, y: 5.3687506, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: 4.1437497, y: 6.0062504, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.3613532, y: 1.3613532, z: 1.7709464, w: 1.7709464} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: 4.1437497, y: 6.0062504, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + center: {x: 4.7812495, y: 5.3687506, z: 2.8687499, w: 0.31875} + firstChild: 9857 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + center: {x: 4.7812495, y: 5.3687506, z: 3.5062497, w: 0.31875} + firstChild: 9865 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + center: {x: 4.7812495, y: 6.0062504, z: 2.8687499, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + center: {x: 4.7812495, y: 6.0062504, z: 3.5062497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 1.1760635, y: 0.539821, z: 1.3613532, w: 0.8726761} + distancesB: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + center: {x: 4.1437497, y: 5.3687506, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + distancesB: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + center: {x: 4.1437497, y: 5.3687506, z: 4.7812495, w: 0.31875} + firstChild: 9873 + - distancesA: {x: 1.3613532, y: 0.8726761, z: 1.7709464, w: 1.4298714} + distancesB: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + center: {x: 4.1437497, y: 6.0062504, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + distancesB: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + center: {x: 4.1437497, y: 6.0062504, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.539821, y: 0.539821, z: 0.8726761, w: 0.8726761} + distancesB: {x: -0.11180318, y: -0.11180318, z: -0.69473505, w: -0.69473505} + center: {x: 4.7812495, y: 5.3687506, z: 4.1437497, w: 0.31875} + firstChild: 9881 + - distancesA: {x: 0.539821, y: -0.11180318, z: 0.8726761, w: -0.69473505} + distancesB: {x: -0.11180318, y: -0.3520751, z: -0.69473505, w: -0.77078766} + center: {x: 4.7812495, y: 5.3687506, z: 4.7812495, w: 0.31875} + firstChild: 9889 + - distancesA: {x: 0.8726761, y: 0.8726761, z: 1.4298714, w: 1.4298714} + distancesB: {x: -0.69473505, y: -0.69473505, z: -1.3287684, w: -1.3287684} + center: {x: 4.7812495, y: 6.0062504, z: 4.1437497, w: 0.31875} + firstChild: -1 + - distancesA: {x: 0.8726761, y: -0.69473505, z: 1.4298714, w: -1.3287684} + distancesB: {x: -0.69473505, y: -0.77078766, z: -1.3287684, w: -1.3700666} + center: {x: 4.7812495, y: 6.0062504, z: 4.7812495, w: 0.31875} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.51686305, y: -0.3631176, z: -0.38181642, w: -0.20391569} + distancesB: {x: -0.36311758, y: -0.18227313, z: -0.20391886, w: 0.035077635} + center: {x: -4.9406247, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3631176, y: -0.31511548, z: -0.20391569, w: -0.1437002} + distancesB: {x: -0.18227313, y: -0.12004278, z: 0.035077635, w: 0.1335152} + center: {x: -4.9406247, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.38181642, y: -0.20391569, z: -0.34850723, w: -0.16412279} + distancesB: {x: -0.2039191, y: 0.035077628, z: -0.16412257, w: 0.10178145} + center: {x: -4.9406247, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.20391569, y: -0.14370018, z: -0.16412279, w: -0.09999991} + distancesB: {x: 0.035077628, y: 0.13351516, z: 0.10178145, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36311758, y: -0.18227313, z: -0.20391886, w: 0.035077635} + distancesB: {x: -0.31511572, y: -0.12004272, z: -0.14369535, w: 0.1335152} + center: {x: -4.6218743, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.18227313, y: -0.12004278, z: 0.035077635, w: 0.1335152} + distancesB: {x: -0.12004272, y: -0.049999956, z: 0.1335152, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.2039191, y: 0.035077628, z: -0.16412257, w: 0.10178145} + distancesB: {x: -0.14369535, y: 0.13351516, z: -0.09999991, w: 0.21875048} + center: {x: -4.6218743, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.035077628, y: 0.13351516, z: 0.10178145, w: 0.21875048} + distancesB: {x: 0.13351516, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151155, y: -0.31514144, z: -0.1437002, w: -0.1437002} + distancesB: {x: -0.12004279, y: -0.12013312, z: 0.1335152, w: 0.13359644} + center: {x: -4.9406247, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31514144, y: -0.31511924, z: -0.1437002, w: -0.1437002} + distancesB: {x: -0.12013312, y: -0.12005256, z: 0.13359644, w: 0.13352399} + center: {x: -4.9406247, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14370018, y: -0.14370018, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13351518, y: 0.1335964, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14370018, y: -0.14370018, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.1335964, y: 0.13352397, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12004279, y: -0.12013312, z: 0.1335152, w: 0.13359644} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12013312, y: -0.12005256, z: 0.13359644, w: 0.13352399} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13351518, y: 0.1335964, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.1335964, y: 0.13352397, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.34850723, y: -0.16412279, z: -0.34850723, w: -0.16412216} + distancesB: {x: -0.16412257, y: 0.10178145, z: -0.16412279, w: 0.10178145} + center: {x: -4.9406247, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412279, y: -0.09999991, z: -0.16412216, w: -0.09999991} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.34850723, y: -0.16412216, z: -0.34850723, w: -0.16412236} + distancesB: {x: -0.16412279, y: 0.10178145, z: -0.16412258, w: 0.10178145} + center: {x: -4.9406247, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412216, y: -0.09999991, z: -0.16412236, w: -0.09999991} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412257, y: 0.10178145, z: -0.16412279, w: 0.10178145} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.6218743, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412279, y: 0.10178145, z: -0.16412258, w: 0.10178145} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.6218743, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31511572, y: -0.12004279, z: -0.14369535, w: 0.1335152} + distancesB: {x: -0.31511006, y: -0.12013312, z: -0.1436874, w: 0.13359644} + center: {x: -4.303125, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12004279, y: -0.049999956, z: 0.1335152, w: 0.26875004} + distancesB: {x: -0.12013312, y: -0.049999956, z: 0.13359644, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14369535, y: 0.13351518, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368741, y: 0.1335964, z: -0.09999991, w: 0.21875048} + center: {x: -4.303125, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13351518, y: 0.26875, z: 0.21875048, w: 0.53749996} + distancesB: {x: 0.1335964, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: -4.303125, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31511006, y: -0.12013312, z: -0.1436874, w: 0.13359644} + distancesB: {x: -0.3151093, y: -0.1200525, z: -0.1436874, w: 0.13352399} + center: {x: -3.9843748, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12013312, y: -0.049999956, z: 0.13359644, w: 0.26875004} + distancesB: {x: -0.1200525, y: -0.049999956, z: 0.13352399, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368741, y: 0.1335964, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368741, y: 0.13352397, z: -0.09999991, w: 0.21875048} + center: {x: -3.9843748, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.1335964, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13352397, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: -3.9843748, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.303125, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.303125, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.303125, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.303125, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.9843748, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.9843748, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.9843748, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.9843748, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31514144, y: -0.31514144, z: -0.1437002, w: -0.1437002} + distancesB: {x: -0.12030266, y: -0.12015635, z: 0.13374878, w: 0.13361731} + center: {x: -4.9406247, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31514144, y: -0.3151241, z: -0.1437002, w: -0.1437002} + distancesB: {x: -0.12015635, y: -0.12006461, z: 0.13361731, w: 0.13353492} + center: {x: -4.9406247, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14370018, y: -0.14370018, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13374877, y: 0.13361728, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14370018, y: -0.14370018, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13361728, y: 0.13353491, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12030266, y: -0.12015635, z: 0.13374878, w: 0.13361731} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12015635, y: -0.12006461, z: 0.13361731, w: 0.13353492} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13374877, y: 0.13361728, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13361728, y: 0.13353491, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151241, y: -0.31514144, z: -0.1437002, w: -0.1437002} + distancesB: {x: -0.12006461, y: -0.120181985, z: 0.13353492, w: 0.13364027} + center: {x: -4.9406247, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31514144, y: -0.31512958, z: -0.1437002, w: -0.1437002} + distancesB: {x: -0.120181985, y: -0.12007898, z: 0.13364027, w: 0.13354804} + center: {x: -4.9406247, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14370018, y: -0.14370018, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13353491, y: 0.13364026, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14370018, y: -0.14370018, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13364026, y: 0.13354802, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12006461, y: -0.120181985, z: 0.13353492, w: 0.13364027} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120181985, y: -0.12007898, z: 0.13364027, w: 0.13354804} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13353491, y: 0.13364026, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13364026, y: 0.13354802, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.34850723, y: -0.16412236, z: -0.34850723, w: -0.16412216} + distancesB: {x: -0.16412258, y: 0.10178145, z: -0.16412267, w: 0.10178145} + center: {x: -4.9406247, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412236, y: -0.09999991, z: -0.16412216, w: -0.09999991} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.34850723, y: -0.16412216, z: -0.34850723, w: -0.16412236} + distancesB: {x: -0.16412267, y: 0.10178145, z: -0.16412228, w: 0.101781085} + center: {x: -4.9406247, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412216, y: -0.09999991, z: -0.16412236, w: -0.09999991} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.101781085, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412258, y: 0.10178145, z: -0.16412267, w: 0.10178145} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.6218743, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412267, y: 0.10178145, z: -0.16412228, w: 0.101781085} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.6218743, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.101781085, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.34850723, y: -0.16412236, z: -0.34850723, w: -0.16412279} + distancesB: {x: -0.16412228, y: 0.101781085, z: -0.16412239, w: 0.10178145} + center: {x: -4.9406247, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412236, y: -0.09999991, z: -0.16412279, w: -0.09999991} + distancesB: {x: 0.101781085, y: 0.21875048, z: 0.10178145, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.34850723, y: -0.16412279, z: -0.34850723, w: -0.16412257} + distancesB: {x: -0.16412239, y: 0.10178145, z: -0.16412286, w: 0.10178145} + center: {x: -4.9406247, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412279, y: -0.09999991, z: -0.16412257, w: -0.09999991} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412228, y: 0.101781085, z: -0.16412239, w: 0.10178145} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.6218743, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.101781085, y: 0.21875048, z: 0.10178145, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412239, y: 0.10178145, z: -0.16412286, w: 0.10178145} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.6218743, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.303125, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.303125, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.303125, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.303125, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.9843748, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.9843748, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.9843748, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.9843748, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.303125, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.303125, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.303125, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.303125, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.9843748, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.9843748, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.9843748, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.9843748, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151093, y: -0.12030248, z: -0.1436874, w: 0.1337488} + distancesB: {x: -0.3151093, y: -0.120156296, z: -0.1436874, w: 0.13361731} + center: {x: -3.6656246, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12030248, y: -0.049999956, z: 0.1337488, w: 0.26875004} + distancesB: {x: -0.120156296, y: -0.049999956, z: 0.13361731, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1436874, y: 0.13374877, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368741, y: 0.13361728, z: -0.09999991, w: 0.21875048} + center: {x: -3.6656246, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13374877, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13361728, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: -3.6656246, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151093, y: -0.120156296, z: -0.1436874, w: 0.13361731} + distancesB: {x: -0.3151093, y: -0.12006461, z: -0.14368741, w: 0.13353513} + center: {x: -3.3468747, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120156296, y: -0.049999956, z: 0.13361731, w: 0.26875004} + distancesB: {x: -0.12006461, y: -0.049999956, z: 0.13353513, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368741, y: 0.13361728, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368741, y: 0.13353512, z: -0.09999991, w: 0.21875048} + center: {x: -3.3468747, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13361728, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13353512, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: -3.3468747, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.6656246, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.6656246, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.6656246, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.6656246, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.3468747, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.3468747, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.3468747, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.3468747, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151093, y: -0.12006461, z: -0.14368741, w: 0.13353513} + distancesB: {x: -0.3151093, y: -0.12018183, z: -0.1436874, w: 0.13364027} + center: {x: -3.0281248, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12006461, y: -0.049999956, z: 0.13353513, w: 0.26875004} + distancesB: {x: -0.12018183, y: -0.049999956, z: 0.13364027, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368741, y: 0.13353512, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.1436874, y: 0.13364026, z: -0.09999991, w: 0.21875048} + center: {x: -3.0281248, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13353512, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13364026, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: -3.0281248, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151093, y: -0.12018183, z: -0.1436874, w: 0.13364027} + distancesB: {x: -0.3151093, y: -0.12007892, z: -0.1436874, w: 0.13354774} + center: {x: -2.709375, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12018183, y: -0.049999956, z: 0.13364027, w: 0.26875004} + distancesB: {x: -0.12007892, y: -0.049999956, z: 0.13354774, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1436874, y: 0.13364026, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.1436874, y: 0.13354771, z: -0.09999991, w: 0.21875048} + center: {x: -2.709375, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13364026, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13354771, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: -2.709375, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.0281248, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.0281248, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.0281248, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.0281248, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.709375, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.709375, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.709375, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.709375, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.6656246, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.6656246, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.6656246, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.6656246, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.3468747, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.3468747, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.3468747, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.3468747, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.6656246, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.6656246, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.6656246, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.6656246, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.3468747, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.3468747, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.3468747, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.3468747, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.0281248, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.0281248, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.0281248, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.0281248, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.709375, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.709375, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.709375, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.709375, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.0281248, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.0281248, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.0281248, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.0281248, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.709375, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.709375, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.709375, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.709375, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31512958, y: -0.3151111, z: -0.1437002, w: -0.1436907} + distancesB: {x: -0.12007897, y: -0.12003061, z: 0.13354802, w: 0.13350455} + center: {x: -4.9406247, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151111, y: -0.31511346, z: -0.1436907, w: -0.14369594} + distancesB: {x: -0.12003061, y: -0.120036885, z: 0.13350455, w: 0.13351019} + center: {x: -4.9406247, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14370018, y: -0.14369072, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13354802, y: 0.13350452, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14369072, y: -0.14369595, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13350452, y: 0.13351017, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12007897, y: -0.12003061, z: 0.13354802, w: 0.13350455} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12003061, y: -0.120036885, z: 0.13350455, w: 0.13351019} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13354802, y: 0.13350452, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350452, y: 0.13351017, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31511346, y: -0.3151132, z: -0.14369594, w: -0.14369528} + distancesB: {x: -0.120036885, y: -0.12003609, z: 0.13351019, w: 0.13350947} + center: {x: -4.9406247, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151132, y: -0.31511134, z: -0.14369528, w: -0.14369115} + distancesB: {x: -0.12003609, y: -0.120031156, z: 0.13350947, w: 0.13350503} + center: {x: -4.9406247, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14369595, y: -0.14369528, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13351019, y: 0.13350946, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14369528, y: -0.14369117, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13350946, y: 0.13350502, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120036885, y: -0.12003609, z: 0.13351019, w: 0.13350947} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12003609, y: -0.120031156, z: 0.13350947, w: 0.13350503} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13351019, y: 0.13350946, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350946, y: 0.13350502, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31511137, y: -0.3151162, z: -0.14369115, w: -0.1437002} + distancesB: {x: -0.120031156, y: -0.12004387, z: 0.13350503, w: 0.13351645} + center: {x: -4.9406247, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151162, y: -0.31511796, z: -0.1437002, w: -0.1437002} + distancesB: {x: -0.12004387, y: -0.120048605, z: 0.13351645, w: 0.13352071} + center: {x: -4.9406247, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14369117, y: -0.14370018, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13350502, y: 0.13351642, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14370018, y: -0.14370018, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13351642, y: 0.13352068, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120031156, y: -0.12004387, z: 0.13350503, w: 0.13351645} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12004387, y: -0.120048605, z: 0.13351645, w: 0.13352071} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350502, y: 0.13351642, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13351642, y: 0.13352068, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31511796, y: -0.31512, z: -0.1437002, w: -0.1437002} + distancesB: {x: -0.120048605, y: -0.1200539, z: 0.13352071, w: 0.13352548} + center: {x: -4.9406247, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31512, y: -0.31510958, z: -0.1437002, w: -0.14368732} + distancesB: {x: -0.12005391, y: -0.12002655, z: 0.13352548, w: 0.1335009} + center: {x: -4.9406247, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14370018, y: -0.14370018, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13352068, y: 0.13352546, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14370018, y: -0.14368732, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13352546, y: 0.13350089, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120048605, y: -0.1200539, z: 0.13352071, w: 0.13352548} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12005391, y: -0.12002655, z: 0.13352548, w: 0.1335009} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13352068, y: 0.13352546, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13352546, y: 0.13350089, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151093, y: -0.120078914, z: -0.1436874, w: 0.13354772} + distancesB: {x: -0.3151093, y: -0.12003061, z: -0.14368787, w: 0.13350426} + center: {x: -2.3906248, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120078914, y: -0.049999956, z: 0.13354772, w: 0.26875004} + distancesB: {x: -0.12003061, y: -0.049999956, z: 0.13350426, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1436874, y: 0.13354771, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368787, y: 0.13350424, z: -0.09999991, w: 0.21875048} + center: {x: -2.3906248, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13354771, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13350424, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: -2.3906248, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151093, y: -0.12003061, z: -0.14368787, w: 0.13350426} + distancesB: {x: -0.3151093, y: -0.12003688, z: -0.14368741, w: 0.13350989} + center: {x: -2.0718749, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12003061, y: -0.049999956, z: 0.13350426, w: 0.26875004} + distancesB: {x: -0.12003688, y: -0.049999956, z: 0.13350989, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368787, y: 0.13350424, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368741, y: 0.13350987, z: -0.09999991, w: 0.21875048} + center: {x: -2.0718749, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350424, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13350987, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: -2.0718749, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.3906248, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.3906248, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.3906248, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.3906248, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.0718749, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.0718749, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.0718749, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.0718749, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151093, y: -0.12003688, z: -0.14368741, w: 0.13350989} + distancesB: {x: -0.3151093, y: -0.12003608, z: -0.14368741, w: 0.13350917} + center: {x: -1.7531248, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12003688, y: -0.049999956, z: 0.13350989, w: 0.26875004} + distancesB: {x: -0.12003608, y: -0.049999956, z: 0.13350917, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368741, y: 0.13350989, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368741, y: 0.13350916, z: -0.09999991, w: 0.21875048} + center: {x: -1.7531248, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350989, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13350916, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: -1.7531248, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151093, y: -0.12003608, z: -0.14368741, w: 0.13350917} + distancesB: {x: -0.3151093, y: -0.120031156, z: -0.1436874, w: 0.13350473} + center: {x: -1.4343749, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12003608, y: -0.049999956, z: 0.13350917, w: 0.26875004} + distancesB: {x: -0.120031156, y: -0.049999956, z: 0.13350473, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368741, y: 0.13350916, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368741, y: 0.13350472, z: -0.09999991, w: 0.21875048} + center: {x: -1.4343749, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350916, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13350472, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: -1.4343749, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.7531248, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.7531248, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.7531248, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.7531248, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.4343749, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.4343749, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.4343749, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.4343749, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.3906248, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.3906248, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.3906248, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.3906248, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.0718749, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.0718749, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.0718749, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.0718749, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.3906248, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.3906248, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.3906248, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.3906248, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.0718749, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.0718749, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.0718749, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.0718749, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.7531248, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.7531248, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.7531248, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.7531248, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.4343749, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.4343749, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.4343749, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.4343749, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.7531248, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.7531248, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.7531248, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.7531248, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.4343749, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.4343749, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.4343749, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.4343749, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151093, y: -0.120031156, z: -0.1436874, w: 0.13350473} + distancesB: {x: -0.3151093, y: -0.120026484, z: -0.1436874, w: 0.13351619} + center: {x: -1.1156249, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120031156, y: -0.049999956, z: 0.13350473, w: 0.26875004} + distancesB: {x: -0.120026484, y: -0.049999956, z: 0.13351619, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368741, y: 0.13350472, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.1436874, y: 0.13351616, z: -0.09999991, w: 0.21875048} + center: {x: -1.1156249, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350472, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13351616, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: -1.1156249, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151093, y: -0.120026484, z: -0.1436874, w: 0.13351619} + distancesB: {x: -0.3151093, y: -0.120026484, z: -0.1436874, w: 0.13352044} + center: {x: -0.79687494, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026484, y: -0.049999956, z: 0.13351619, w: 0.26875004} + distancesB: {x: -0.120026484, y: -0.049999956, z: 0.13352044, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1436874, y: 0.13351616, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.1436874, y: 0.13352044, z: -0.09999991, w: 0.21875048} + center: {x: -0.79687494, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13351616, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13352044, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: -0.79687494, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.1156249, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.1156249, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.1156249, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.1156249, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.79687494, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.79687494, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.79687494, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.79687494, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151093, y: -0.120026484, z: -0.1436874, w: 0.13352044} + distancesB: {x: -0.3151093, y: -0.12002649, z: -0.14368741, w: 0.13352522} + center: {x: -0.47812498, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026484, y: -0.049999956, z: 0.13352044, w: 0.26875004} + distancesB: {x: -0.12002649, y: -0.049999956, z: 0.13352522, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1436874, y: 0.13352044, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368741, y: 0.1335252, z: -0.09999991, w: 0.21875048} + center: {x: -0.47812498, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13352044, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.1335252, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: -0.47812498, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151093, y: -0.12002649, z: -0.14368741, w: 0.13352522} + distancesB: {x: -0.31510967, y: -0.12002672, z: -0.14368741, w: 0.13350084} + center: {x: -0.159375, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002649, y: -0.049999956, z: 0.13352522, w: 0.26875004} + distancesB: {x: -0.12002672, y: -0.049999956, z: 0.13350084, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368741, y: 0.1335252, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368741, y: 0.13350083, z: -0.09999991, w: 0.21875048} + center: {x: -0.159375, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.1335252, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13350083, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: -0.159375, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.47812498, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.47812498, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.47812498, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.47812498, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.159375, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.159375, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.159375, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.159375, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.1156249, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.1156249, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.1156249, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.1156249, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.79687494, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.79687494, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.79687494, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.79687494, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.1156249, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.1156249, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.1156249, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.1156249, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.79687494, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.79687494, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.79687494, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.79687494, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.47812498, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.47812498, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.47812498, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.47812498, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.159375, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.159375, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.159375, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.159375, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.47812498, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.47812498, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.47812498, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.47812498, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.159375, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.159375, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.159375, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.159375, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -4.303125, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -4.303125, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.9843748, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.9843748, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.6656246, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.6656246, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.3468747, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.3468747, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -3.0281248, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -3.0281248, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.709375, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.709375, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31510958, y: -0.31510967, z: -0.14368732, w: -0.14368756} + distancesB: {x: -0.12002655, y: -0.120026834, z: 0.1335009, w: 0.13350083} + center: {x: -4.9406247, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31510967, y: -0.31511, z: -0.14368756, w: -0.14368841} + distancesB: {x: -0.120026834, y: -0.1200277, z: 0.13350083, w: 0.13350083} + center: {x: -4.9406247, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368732, y: -0.14368756, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13350089, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368756, y: -0.14368843, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002655, y: -0.120026834, z: 0.1335009, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026834, y: -0.1200277, z: 0.13350083, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350089, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31511, y: -0.31511053, z: -0.14368829, w: -0.14368974} + distancesB: {x: -0.1200277, y: -0.12002914, z: 0.13350083, w: 0.13350083} + center: {x: -4.9406247, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31511053, y: -0.31511137, z: -0.14368974, w: -0.1436914} + distancesB: {x: -0.12002914, y: -0.120026715, z: 0.13350083, w: 0.13350083} + center: {x: -4.9406247, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368829, y: -0.14368974, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368974, y: -0.14369142, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1200277, y: -0.12002914, z: 0.13350083, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002914, y: -0.120026715, z: 0.13350083, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31511137, y: -0.31511235, z: -0.1436914, w: -0.14369357} + distancesB: {x: -0.12002672, y: -0.120026715, z: 0.13350083, w: 0.13350083} + center: {x: -4.9406247, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31511235, y: -0.31511354, z: -0.14369357, w: -0.14369619} + distancesB: {x: -0.120026715, y: -0.12002649, z: 0.13350083, w: 0.13350083} + center: {x: -4.9406247, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14369142, y: -0.14369358, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14369358, y: -0.1436962, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002672, y: -0.120026715, z: 0.13350083, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026715, y: -0.12002649, z: 0.13350083, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31511354, y: -0.31511497, z: -0.14369619, w: -0.14369932} + distancesB: {x: -0.12002649, y: -0.120026484, z: 0.13350083, w: 0.13350083} + center: {x: -4.9406247, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31511497, y: -0.31511015, z: -0.14369932, w: -0.14368922} + distancesB: {x: -0.120026484, y: -0.120026484, z: 0.13350083, w: 0.13350084} + center: {x: -4.9406247, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1436962, y: -0.14369933, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14369933, y: -0.14368923, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002649, y: -0.120026484, z: 0.13350083, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026484, y: -0.120026484, z: 0.13350083, w: 0.13350084} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31511036, y: -0.31511104, z: -0.14368922, w: -0.1436907} + distancesB: {x: -0.12002649, y: -0.12002672, z: 0.13350084, w: 0.13350083} + center: {x: -4.9406247, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31511104, y: -0.31511003, z: -0.1436907, w: -0.14368846} + distancesB: {x: -0.12002672, y: -0.12002672, z: 0.13350083, w: 0.13350083} + center: {x: -4.9406247, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368923, y: -0.14369072, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14369072, y: -0.14368847, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002649, y: -0.12002672, z: 0.13350084, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002672, y: -0.12002672, z: 0.13350083, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31511003, y: -0.31511047, z: -0.14368846, w: -0.14368962} + distancesB: {x: -0.12002672, y: -0.120026484, z: 0.13350083, w: 0.13350083} + center: {x: -4.9406247, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31511047, y: -0.31510928, z: -0.14368962, w: -0.14368758} + distancesB: {x: -0.120026484, y: -0.120026484, z: 0.13350083, w: 0.13350083} + center: {x: -4.9406247, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368847, y: -0.14368963, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368963, y: -0.1436876, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002672, y: -0.120026484, z: 0.13350083, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026484, y: -0.120026484, z: 0.13350083, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31510928, y: -0.3151093, z: -0.14368758, w: -0.14368747} + distancesB: {x: -0.120026484, y: -0.120026484, z: 0.13350083, w: 0.13350083} + center: {x: -4.9406247, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151093, y: -0.3151093, z: -0.14368747, w: -0.14368741} + distancesB: {x: -0.120026484, y: -0.12002672, z: 0.13350083, w: 0.13350083} + center: {x: -4.9406247, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1436876, y: -0.14368749, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368749, y: -0.14368741, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026484, y: -0.120026484, z: 0.13350083, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026484, y: -0.12002672, z: 0.13350083, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.6218743, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.53749996} + center: {x: -4.6218743, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151093, y: -0.36311758, z: -0.14368741, w: -0.20391886} + distancesB: {x: -0.12002672, y: -0.18227313, z: 0.13350083, w: 0.035077635} + center: {x: -4.9406247, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36311758, y: -0.51686305, z: -0.20391886, w: -0.38181642} + distancesB: {x: -0.18227313, y: -0.3631176, z: 0.035077635, w: -0.20391569} + center: {x: -4.9406247, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368741, y: -0.2039191, z: -0.09999991, w: -0.16412257} + distancesB: {x: 0.13350083, y: 0.035077628, z: 0.21875048, w: 0.10178145} + center: {x: -4.9406247, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.2039191, y: -0.38181642, z: -0.16412257, w: -0.34850723} + distancesB: {x: 0.035077628, y: -0.20391569, z: 0.10178145, w: -0.16412279} + center: {x: -4.9406247, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002672, y: -0.18227313, z: 0.13350083, w: 0.035077635} + distancesB: {x: -0.049999956, y: -0.12004278, z: 0.26875004, w: 0.1335152} + center: {x: -4.6218743, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.18227313, y: -0.3631176, z: 0.035077635, w: -0.20391569} + distancesB: {x: -0.12004278, y: -0.31511548, z: 0.1335152, w: -0.1437002} + center: {x: -4.6218743, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.035077628, z: 0.21875048, w: 0.10178145} + distancesB: {x: 0.26875, y: 0.13351516, z: 0.5375008, w: 0.21875048} + center: {x: -4.6218743, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.035077628, y: -0.20391569, z: 0.10178145, w: -0.16412279} + distancesB: {x: 0.13351516, y: -0.14370018, z: 0.21875048, w: -0.09999991} + center: {x: -4.6218743, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 0.746875, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.065625, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 0.746875, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + center: {x: -4.6218743, y: 0.746875, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.065625, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + center: {x: -4.6218743, y: 1.065625, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.16412257, z: -0.09999991, w: -0.16412279} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + center: {x: -4.9406247, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412257, y: -0.34850723, z: -0.16412279, w: -0.34850723} + distancesB: {x: 0.10178145, y: -0.16412279, z: 0.10178145, w: -0.16412216} + center: {x: -4.9406247, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.16412279, z: -0.09999991, w: -0.16412258} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + center: {x: -4.9406247, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412279, y: -0.34850723, z: -0.16412258, w: -0.34850723} + distancesB: {x: 0.10178145, y: -0.16412216, z: 0.10178145, w: -0.16412236} + center: {x: -4.9406247, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.6218743, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.16412279, z: 0.10178145, w: -0.16412216} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.6218743, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.6218743, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.16412216, z: 0.10178145, w: -0.16412236} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.6218743, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -4.303125, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -4.303125, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: -4.303125, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.9843748, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.9843748, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: -3.9843748, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.12004279, z: 0.26875004, w: 0.1335152} + distancesB: {x: -0.049999956, y: -0.12013312, z: 0.26875004, w: 0.13359644} + center: {x: -4.303125, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12004279, y: -0.3151155, z: 0.1335152, w: -0.1437002} + distancesB: {x: -0.12013312, y: -0.31514144, z: 0.13359644, w: -0.1437002} + center: {x: -4.303125, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13351518, z: 0.53749996, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.1335964, z: 0.5375008, w: 0.21875048} + center: {x: -4.303125, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13351518, y: -0.14370018, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.1335964, y: -0.14370018, z: 0.21875048, w: -0.09999991} + center: {x: -4.303125, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.12013312, z: 0.26875004, w: 0.13359644} + distancesB: {x: -0.049999956, y: -0.12005256, z: 0.26875004, w: 0.13352399} + center: {x: -3.9843748, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12013312, y: -0.31514144, z: 0.13359644, w: -0.1437002} + distancesB: {x: -0.12005256, y: -0.31511924, z: 0.13352399, w: -0.1437002} + center: {x: -3.9843748, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.1335964, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13352397, z: 0.5375008, w: 0.21875048} + center: {x: -3.9843748, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.1335964, y: -0.14370018, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13352397, y: -0.14370018, z: 0.21875048, w: -0.09999991} + center: {x: -3.9843748, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.303125, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.303125, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.303125, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.303125, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.9843748, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.9843748, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.9843748, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.9843748, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.384375, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 1.7031249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.384375, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + center: {x: -4.6218743, y: 1.384375, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 1.7031249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + center: {x: -4.6218743, y: 1.7031249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.16412258, z: -0.09999991, w: -0.16412267} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + center: {x: -4.9406247, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412258, y: -0.34850723, z: -0.16412267, w: -0.34850723} + distancesB: {x: 0.10178145, y: -0.16412236, z: 0.10178145, w: -0.16412216} + center: {x: -4.9406247, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.16412267, z: -0.09999991, w: -0.16412228} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.101781085} + center: {x: -4.9406247, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412267, y: -0.34850723, z: -0.16412228, w: -0.34850723} + distancesB: {x: 0.10178145, y: -0.16412216, z: 0.101781085, w: -0.16412236} + center: {x: -4.9406247, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.6218743, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.16412236, z: 0.10178145, w: -0.16412216} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.6218743, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.101781085} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.6218743, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.16412216, z: 0.101781085, w: -0.16412236} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.6218743, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.021875, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.3406248, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.021875, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + center: {x: -4.6218743, y: 2.021875, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.3406248, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + center: {x: -4.6218743, y: 2.3406248, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.16412228, z: -0.09999991, w: -0.16412239} + distancesB: {x: 0.21875048, y: 0.101781085, z: 0.21875048, w: 0.10178145} + center: {x: -4.9406247, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412228, y: -0.34850723, z: -0.16412239, w: -0.34850723} + distancesB: {x: 0.101781085, y: -0.16412236, z: 0.10178145, w: -0.16412279} + center: {x: -4.9406247, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.16412239, z: -0.09999991, w: -0.16412286} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + center: {x: -4.9406247, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412239, y: -0.34850723, z: -0.16412286, w: -0.34850723} + distancesB: {x: 0.10178145, y: -0.16412279, z: 0.10178145, w: -0.16412257} + center: {x: -4.9406247, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.101781085, z: 0.21875048, w: 0.10178145} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.6218743, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.101781085, y: -0.16412236, z: 0.10178145, w: -0.16412279} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.6218743, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.6218743, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.16412279, z: 0.10178145, w: -0.16412257} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.6218743, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.303125, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.303125, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.303125, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.303125, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.9843748, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.9843748, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.9843748, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.9843748, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.303125, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.303125, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.303125, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.303125, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.9843748, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.9843748, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.9843748, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.9843748, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.6656246, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.6656246, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: -3.6656246, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.3468747, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.3468747, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: -3.3468747, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.12030266, z: 0.26875004, w: 0.13374878} + distancesB: {x: -0.049999956, y: -0.12015635, z: 0.26875004, w: 0.13361731} + center: {x: -3.6656246, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12030266, y: -0.31514144, z: 0.13374878, w: -0.1437002} + distancesB: {x: -0.12015635, y: -0.31514144, z: 0.13361731, w: -0.1437002} + center: {x: -3.6656246, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13374877, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13361728, z: 0.5375008, w: 0.21875048} + center: {x: -3.6656246, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13374877, y: -0.14370018, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13361728, y: -0.14370018, z: 0.21875048, w: -0.09999991} + center: {x: -3.6656246, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.12015635, z: 0.26875004, w: 0.13361731} + distancesB: {x: -0.049999956, y: -0.12006461, z: 0.26875004, w: 0.13353492} + center: {x: -3.3468747, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12015635, y: -0.31514144, z: 0.13361731, w: -0.1437002} + distancesB: {x: -0.12006461, y: -0.3151241, z: 0.13353492, w: -0.1437002} + center: {x: -3.3468747, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13361728, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13353491, z: 0.5375008, w: 0.21875048} + center: {x: -3.3468747, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13361728, y: -0.14370018, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13353491, y: -0.14370018, z: 0.21875048, w: -0.09999991} + center: {x: -3.3468747, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.6656246, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.6656246, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.6656246, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.6656246, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.3468747, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.3468747, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.3468747, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.3468747, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -3.0281248, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -3.0281248, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: -3.0281248, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.709375, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.709375, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: -2.709375, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.12006461, z: 0.26875004, w: 0.13353492} + distancesB: {x: -0.049999956, y: -0.120181985, z: 0.26875004, w: 0.13364027} + center: {x: -3.0281248, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12006461, y: -0.3151241, z: 0.13353492, w: -0.1437002} + distancesB: {x: -0.120181985, y: -0.31514144, z: 0.13364027, w: -0.1437002} + center: {x: -3.0281248, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13353491, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13364026, z: 0.5375008, w: 0.21875048} + center: {x: -3.0281248, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13353491, y: -0.14370018, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13364026, y: -0.14370018, z: 0.21875048, w: -0.09999991} + center: {x: -3.0281248, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.120181985, z: 0.26875004, w: 0.13364027} + distancesB: {x: -0.049999956, y: -0.12007898, z: 0.26875004, w: 0.13354804} + center: {x: -2.709375, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120181985, y: -0.31514144, z: 0.13364027, w: -0.1437002} + distancesB: {x: -0.12007898, y: -0.31512958, z: 0.13354804, w: -0.1437002} + center: {x: -2.709375, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13364026, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13354802, z: 0.5375008, w: 0.21875048} + center: {x: -2.709375, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13364026, y: -0.14370018, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13354802, y: -0.14370018, z: 0.21875048, w: -0.09999991} + center: {x: -2.709375, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.0281248, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.0281248, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.0281248, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.0281248, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.709375, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.709375, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.709375, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.709375, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.6656246, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.6656246, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.6656246, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.6656246, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.3468747, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.3468747, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.3468747, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.3468747, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.6656246, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.6656246, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.6656246, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.6656246, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.3468747, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.3468747, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.3468747, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.3468747, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.0281248, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.0281248, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.0281248, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.0281248, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.709375, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.709375, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.709375, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.709375, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.0281248, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.0281248, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.0281248, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.0281248, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.709375, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.709375, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.709375, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.709375, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.3906248, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.3906248, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -2.0718749, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -2.0718749, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.7531248, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.7531248, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.4343749, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.4343749, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -1.1156249, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -1.1156249, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.79687494, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.79687494, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.47812498, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.47812498, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: -0.159375, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: -0.159375, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.3906248, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.3906248, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: -2.3906248, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -2.0718749, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -2.0718749, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: -2.0718749, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.12007897, z: 0.26875004, w: 0.13354802} + distancesB: {x: -0.049999956, y: -0.12003061, z: 0.26875004, w: 0.13350455} + center: {x: -2.3906248, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12007897, y: -0.31512958, z: 0.13354802, w: -0.1437002} + distancesB: {x: -0.12003061, y: -0.3151111, z: 0.13350455, w: -0.1436907} + center: {x: -2.3906248, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13354802, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13350452, z: 0.5375008, w: 0.21875048} + center: {x: -2.3906248, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13354802, y: -0.14370018, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13350452, y: -0.14369072, z: 0.21875048, w: -0.09999991} + center: {x: -2.3906248, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.12003061, z: 0.26875004, w: 0.13350455} + distancesB: {x: -0.049999956, y: -0.120036885, z: 0.26875004, w: 0.13351019} + center: {x: -2.0718749, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12003061, y: -0.3151111, z: 0.13350455, w: -0.1436907} + distancesB: {x: -0.120036885, y: -0.31511346, z: 0.13351019, w: -0.14369594} + center: {x: -2.0718749, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13350452, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13351017, z: 0.5375008, w: 0.21875048} + center: {x: -2.0718749, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350452, y: -0.14369072, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13351017, y: -0.14369595, z: 0.21875048, w: -0.09999991} + center: {x: -2.0718749, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.3906248, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.3906248, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.3906248, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.3906248, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.0718749, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.0718749, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.0718749, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.0718749, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.7531248, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.7531248, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: -1.7531248, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.4343749, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.4343749, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: -1.4343749, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.120036885, z: 0.26875004, w: 0.13351019} + distancesB: {x: -0.049999956, y: -0.12003609, z: 0.26875004, w: 0.13350947} + center: {x: -1.7531248, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120036885, y: -0.31511346, z: 0.13351019, w: -0.14369594} + distancesB: {x: -0.12003609, y: -0.3151132, z: 0.13350947, w: -0.14369528} + center: {x: -1.7531248, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13351019, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13350946, z: 0.5375008, w: 0.21875048} + center: {x: -1.7531248, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13351019, y: -0.14369595, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13350946, y: -0.14369528, z: 0.21875048, w: -0.09999991} + center: {x: -1.7531248, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.12003609, z: 0.26875004, w: 0.13350947} + distancesB: {x: -0.049999956, y: -0.120031156, z: 0.26875004, w: 0.13350503} + center: {x: -1.4343749, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12003609, y: -0.3151132, z: 0.13350947, w: -0.14369528} + distancesB: {x: -0.120031156, y: -0.31511134, z: 0.13350503, w: -0.14369115} + center: {x: -1.4343749, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13350946, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13350502, z: 0.5375008, w: 0.21875048} + center: {x: -1.4343749, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350946, y: -0.14369528, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13350502, y: -0.14369117, z: 0.21875048, w: -0.09999991} + center: {x: -1.4343749, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.7531248, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.7531248, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.7531248, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.7531248, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.4343749, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.4343749, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.4343749, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.4343749, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.3906248, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.3906248, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.3906248, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.3906248, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.0718749, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.0718749, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.0718749, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.0718749, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.3906248, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.3906248, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.3906248, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.3906248, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.0718749, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.0718749, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.0718749, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.0718749, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.7531248, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.7531248, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.7531248, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.7531248, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.4343749, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.4343749, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.4343749, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.4343749, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.7531248, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.7531248, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.7531248, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.7531248, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.4343749, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.4343749, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.4343749, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.4343749, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -1.1156249, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -1.1156249, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: -1.1156249, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.79687494, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.79687494, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: -0.79687494, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.120031156, z: 0.26875004, w: 0.13350503} + distancesB: {x: -0.049999956, y: -0.12004387, z: 0.26875004, w: 0.13351645} + center: {x: -1.1156249, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120031156, y: -0.31511137, z: 0.13350503, w: -0.14369115} + distancesB: {x: -0.12004387, y: -0.3151162, z: 0.13351645, w: -0.1437002} + center: {x: -1.1156249, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13350502, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13351642, z: 0.5375008, w: 0.21875048} + center: {x: -1.1156249, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350502, y: -0.14369117, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13351642, y: -0.14370018, z: 0.21875048, w: -0.09999991} + center: {x: -1.1156249, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.12004387, z: 0.26875004, w: 0.13351645} + distancesB: {x: -0.049999956, y: -0.120048605, z: 0.26875004, w: 0.13352071} + center: {x: -0.79687494, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12004387, y: -0.3151162, z: 0.13351645, w: -0.1437002} + distancesB: {x: -0.120048605, y: -0.31511796, z: 0.13352071, w: -0.1437002} + center: {x: -0.79687494, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13351642, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13352068, z: 0.5375008, w: 0.21875048} + center: {x: -0.79687494, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13351642, y: -0.14370018, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13352068, y: -0.14370018, z: 0.21875048, w: -0.09999991} + center: {x: -0.79687494, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.1156249, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.1156249, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.1156249, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.1156249, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.79687494, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.79687494, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.79687494, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.79687494, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.47812498, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.47812498, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: -0.47812498, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: -0.159375, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: -0.159375, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: -0.159375, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.120048605, z: 0.26875004, w: 0.13352071} + distancesB: {x: -0.049999956, y: -0.1200539, z: 0.26875004, w: 0.13352548} + center: {x: -0.47812498, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120048605, y: -0.31511796, z: 0.13352071, w: -0.1437002} + distancesB: {x: -0.1200539, y: -0.31512, z: 0.13352548, w: -0.1437002} + center: {x: -0.47812498, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13352068, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13352546, z: 0.5375008, w: 0.21875048} + center: {x: -0.47812498, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13352068, y: -0.14370018, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13352546, y: -0.14370018, z: 0.21875048, w: -0.09999991} + center: {x: -0.47812498, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.12005391, z: 0.26875004, w: 0.13352548} + distancesB: {x: -0.049999956, y: -0.12002655, z: 0.26875004, w: 0.1335009} + center: {x: -0.159375, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12005391, y: -0.31512, z: 0.13352548, w: -0.1437002} + distancesB: {x: -0.12002655, y: -0.31510958, z: 0.1335009, w: -0.14368732} + center: {x: -0.159375, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13352546, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13350089, z: 0.5375008, w: 0.21875048} + center: {x: -0.159375, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13352546, y: -0.14370018, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13350089, y: -0.14368732, z: 0.21875048, w: -0.09999991} + center: {x: -0.159375, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.47812498, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.47812498, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.47812498, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.47812498, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.159375, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.159375, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.159375, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.159375, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.1156249, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.1156249, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.1156249, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.1156249, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.79687494, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.79687494, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.79687494, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.79687494, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.1156249, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.1156249, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.1156249, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.1156249, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.79687494, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.79687494, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.79687494, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.79687494, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.47812498, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.47812498, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.47812498, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.47812498, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.159375, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.159375, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.159375, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.159375, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.47812498, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.47812498, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.47812498, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.47812498, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.159375, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.159375, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.159375, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.159375, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.34850723, y: -0.16412257, z: -0.34850723, w: -0.16412279} + distancesB: {x: -0.1641226, y: 0.10178145, z: -0.1641224, w: 0.10178145} + center: {x: -4.9406247, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412257, y: -0.09999991, z: -0.16412279, w: -0.09999991} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.34850723, y: -0.16412279, z: -0.34850723, w: -0.16412257} + distancesB: {x: -0.1641224, y: 0.10178145, z: -0.16412283, w: 0.10178145} + center: {x: -4.9406247, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412279, y: -0.09999991, z: -0.16412257, w: -0.09999991} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1641226, y: 0.10178145, z: -0.1641224, w: 0.10178145} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.6218743, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1641224, y: 0.10178145, z: -0.16412283, w: 0.10178145} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.6218743, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.34850723, y: -0.16412257, z: -0.34850723, w: -0.16412279} + distancesB: {x: -0.16412283, y: 0.10178145, z: -0.16412297, w: 0.10178145} + center: {x: -4.9406247, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412257, y: -0.09999991, z: -0.16412279, w: -0.09999991} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.34850723, y: -0.16412279, z: -0.34850723, w: -0.16412279} + distancesB: {x: -0.16412297, y: 0.10178145, z: -0.16412242, w: 0.10178145} + center: {x: -4.9406247, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412279, y: -0.09999991, z: -0.16412279, w: -0.09999991} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412283, y: 0.10178145, z: -0.16412297, w: 0.10178145} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.6218743, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412297, y: 0.10178145, z: -0.16412242, w: 0.10178145} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.6218743, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.303125, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.303125, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.303125, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.303125, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.9843748, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.9843748, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.9843748, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.9843748, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.303125, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.303125, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.303125, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.303125, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.9843748, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.9843748, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.9843748, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.9843748, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.34850723, y: -0.16412279, z: -0.34850723, w: -0.16412216} + distancesB: {x: -0.16412242, y: 0.10178145, z: -0.16412258, w: 0.10178145} + center: {x: -4.9406247, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412279, y: -0.09999991, z: -0.16412216, w: -0.09999991} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.34850723, y: -0.16412216, z: -0.34850723, w: -0.16412243} + distancesB: {x: -0.16412258, y: 0.10178145, z: -0.16412243, w: 0.10178145} + center: {x: -4.9406247, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412216, y: -0.09999991, z: -0.16412243, w: -0.09999991} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412242, y: 0.10178145, z: -0.16412258, w: 0.10178145} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.6218743, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412258, y: 0.10178145, z: -0.16412243, w: 0.10178145} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.6218743, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.34850723, y: -0.16412348, z: -0.34850723, w: -0.16412257} + distancesB: {x: -0.1641237, y: 0.10178145, z: -0.16412257, w: 0.1017818} + center: {x: -4.9406247, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412348, y: -0.09999991, z: -0.16412257, w: -0.09999991} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.1017818, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.34850723, y: -0.16412257, z: -0.3520757, w: -0.17156968} + distancesB: {x: -0.16412257, y: 0.1017818, z: -0.17156953, w: 0.1133995} + center: {x: -4.9406247, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412257, y: -0.09999991, z: -0.17156968, w: -0.1118034} + distancesB: {x: 0.1017818, y: 0.21875048, z: 0.1133995, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1641237, y: 0.10178145, z: -0.16412257, w: 0.1017818} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.6218743, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.1017818, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412257, y: 0.1017818, z: -0.17156953, w: 0.1133995} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: -4.6218743, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.1017818, y: 0.21875048, z: 0.1133995, w: 0.22439204} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.53749996, y: 0.5375008, z: 0.5398205, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.303125, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.303125, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.303125, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.303125, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.9843748, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.9843748, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.9843748, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.9843748, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -4.303125, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -4.303125, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: -4.303125, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.53749996, z: 0.22439204, w: 0.5398205} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: -4.303125, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.9843748, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.9843748, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: -3.9843748, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: -3.9843748, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.6656246, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.6656246, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.6656246, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.6656246, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.3468747, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.3468747, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.3468747, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.3468747, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.6656246, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.6656246, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.6656246, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.6656246, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.3468747, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.3468747, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.3468747, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.3468747, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.0281248, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.0281248, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.0281248, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.0281248, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.709375, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.709375, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.709375, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.709375, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.0281248, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.0281248, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.0281248, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.0281248, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.709375, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.709375, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.709375, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.709375, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.6656246, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.6656246, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.6656246, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.6656246, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.3468747, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.3468747, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.3468747, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.3468747, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.6656246, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.6656246, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: -3.6656246, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: -3.6656246, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.3468747, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.3468747, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: -3.3468747, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: -3.3468747, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.0281248, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.0281248, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.0281248, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.0281248, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.709375, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.709375, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.709375, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.709375, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -3.0281248, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -3.0281248, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: -3.0281248, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: -3.0281248, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.709375, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.709375, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: -2.709375, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: -2.709375, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3520757, y: -0.17156968, z: -0.50737983, w: -0.40362495} + distancesB: {x: -0.17156953, y: 0.1133995, z: -0.40362453, w: 0.3825394} + center: {x: -4.9406247, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.17156968, y: -0.1118034, z: -0.40362495, w: -0.3820693} + distancesB: {x: 0.1133995, y: 0.22439204, z: 0.3825394, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: 9897 + - distancesA: {x: -0.50737983, y: -0.40362495, z: -0.77078843, w: -0.7068194} + distancesB: {x: -0.40362453, y: 0.3825394, z: -0.70681894, w: 0.6949943} + center: {x: -4.9406247, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.40362495, y: -0.3820693, z: -0.7068194, w: -0.6947356} + distancesB: {x: 0.3825394, y: 0.42875254, z: 0.6949943, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.17156953, y: 0.1133995, z: -0.40362453, w: 0.3825394} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: -4.6218743, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 9905 + - distancesA: {x: 0.1133995, y: 0.22439204, z: 0.3825394, w: 0.42875254} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.40362453, y: 0.3825394, z: -0.70681894, w: 0.6949943} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: -4.6218743, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.3825394, y: 0.42875254, z: 0.6949943, w: 0.72146326} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: -4.303125, w: 0.159375} + firstChild: 9913 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: -3.9843748, w: 0.159375} + firstChild: 9921 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.5398205, y: 0.53982145, z: 0.6518306, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518306, y: 0.6518314, z: 0.87267613, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: -4.303125, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 9929 + - distancesA: {x: 0.22439204, y: 0.5398205, z: 0.42875254, w: 0.6518306} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: -4.303125, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: -4.303125, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518306, z: 0.72146326, w: 0.87267613} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: -4.303125, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: -3.9843748, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 9937 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: -3.9843748, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: -3.9843748, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: -3.9843748, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: -3.6656246, w: 0.159375} + firstChild: 9945 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: -3.3468747, w: 0.159375} + firstChild: 9953 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: -3.0281248, w: 0.159375} + firstChild: 9961 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: -2.709375, w: 0.159375} + firstChild: 9969 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: -3.6656246, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 9977 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: -3.6656246, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: -3.6656246, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: -3.6656246, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: -3.3468747, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 9985 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: -3.3468747, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: -3.3468747, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: -3.3468747, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: -3.0281248, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 9993 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: -3.0281248, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: -3.0281248, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: -3.0281248, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: -2.709375, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10001 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: -2.709375, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: -2.709375, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: -2.709375, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: -2.3906248, w: 0.159375} + firstChild: 10009 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: -2.0718749, w: 0.159375} + firstChild: 10017 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: -1.7531248, w: 0.159375} + firstChild: 10025 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: -1.4343749, w: 0.159375} + firstChild: 10033 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: -1.1156249, w: 0.159375} + firstChild: 10041 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: -0.79687494, w: 0.159375} + firstChild: 10049 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: -0.47812498, w: 0.159375} + firstChild: 10057 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: -0.159375, w: 0.159375} + firstChild: 10065 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.3906248, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.3906248, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.3906248, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.3906248, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.0718749, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.0718749, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.0718749, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.0718749, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.3906248, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.3906248, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.3906248, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.3906248, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.0718749, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.0718749, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.0718749, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.0718749, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.7531248, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.7531248, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.7531248, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.7531248, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.4343749, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.4343749, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.4343749, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.4343749, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.7531248, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.7531248, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.7531248, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.7531248, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.4343749, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.4343749, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.4343749, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.4343749, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.3906248, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.3906248, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.3906248, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.3906248, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.0718749, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.0718749, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.0718749, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.0718749, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.3906248, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.3906248, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: -2.3906248, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: -2.3906248, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -2.0718749, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -2.0718749, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: -2.0718749, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: -2.0718749, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.7531248, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.7531248, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.7531248, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.7531248, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.4343749, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.4343749, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.4343749, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.4343749, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.7531248, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.7531248, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: -1.7531248, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: -1.7531248, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.4343749, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.4343749, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: -1.4343749, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: -1.4343749, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.1156249, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.1156249, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.1156249, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.1156249, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.79687494, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.79687494, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.79687494, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.79687494, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.1156249, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.1156249, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.1156249, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.1156249, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.79687494, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.79687494, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.79687494, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.79687494, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.47812498, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.47812498, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.47812498, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.47812498, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.159375, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.159375, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.159375, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.159375, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.47812498, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.47812498, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.47812498, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.47812498, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.159375, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.159375, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.159375, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.159375, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.1156249, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.1156249, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.1156249, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.1156249, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.79687494, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.79687494, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.79687494, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.79687494, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -1.1156249, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -1.1156249, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: -1.1156249, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: -1.1156249, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.79687494, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.79687494, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: -0.79687494, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: -0.79687494, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.47812498, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.47812498, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.47812498, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.47812498, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.159375, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.159375, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.159375, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.159375, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.47812498, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.47812498, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: -0.47812498, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: -0.47812498, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: -0.159375, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: -0.159375, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: -0.159375, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: -0.159375, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: -2.3906248, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10073 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: -2.3906248, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: -2.3906248, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: -2.3906248, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: -2.0718749, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10081 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: -2.0718749, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: -2.0718749, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: -2.0718749, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: -1.7531248, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10089 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: -1.7531248, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: -1.7531248, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: -1.7531248, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: -1.4343749, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10097 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: -1.4343749, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: -1.4343749, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: -1.4343749, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: -1.1156249, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10105 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: -1.1156249, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: -1.1156249, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: -1.1156249, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: -0.79687494, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10113 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: -0.79687494, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: -0.79687494, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: -0.79687494, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: -0.47812498, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10121 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: -0.47812498, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: -0.47812498, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: -0.47812498, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: -0.159375, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10129 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: -0.159375, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: -0.159375, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: -0.159375, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.6593752, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 2.978125, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.6593752, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + center: {x: -4.6218743, y: 2.6593752, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 2.978125, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + center: {x: -4.6218743, y: 2.978125, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.1641226, z: -0.09999991, w: -0.1641224} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + center: {x: -4.9406247, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1641226, y: -0.34850723, z: -0.1641224, w: -0.34850723} + distancesB: {x: 0.10178145, y: -0.16412257, z: 0.10178145, w: -0.16412279} + center: {x: -4.9406247, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.1641224, z: -0.09999991, w: -0.16412283} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + center: {x: -4.9406247, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1641224, y: -0.34850723, z: -0.16412283, w: -0.34850723} + distancesB: {x: 0.10178145, y: -0.16412279, z: 0.10178145, w: -0.16412257} + center: {x: -4.9406247, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.6218743, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.16412257, z: 0.10178145, w: -0.16412279} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.6218743, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.6218743, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.16412279, z: 0.10178145, w: -0.16412257} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.6218743, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.296875, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.615625, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.296875, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + center: {x: -4.6218743, y: 3.296875, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.615625, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + center: {x: -4.6218743, y: 3.615625, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.16412283, z: -0.09999991, w: -0.16412297} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + center: {x: -4.9406247, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412283, y: -0.34850723, z: -0.16412297, w: -0.34850723} + distancesB: {x: 0.10178145, y: -0.16412257, z: 0.10178145, w: -0.16412279} + center: {x: -4.9406247, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.16412297, z: -0.09999991, w: -0.16412242} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + center: {x: -4.9406247, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412297, y: -0.34850723, z: -0.16412242, w: -0.34850723} + distancesB: {x: 0.10178145, y: -0.16412279, z: 0.10178145, w: -0.16412279} + center: {x: -4.9406247, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.6218743, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.16412257, z: 0.10178145, w: -0.16412279} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.6218743, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.6218743, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.16412279, z: 0.10178145, w: -0.16412279} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.6218743, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.303125, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.303125, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.303125, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.303125, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.9843748, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.9843748, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.9843748, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.9843748, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.303125, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.303125, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.303125, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.303125, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.9843748, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.9843748, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.9843748, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.9843748, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 3.934375, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.253125, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 3.934375, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + center: {x: -4.6218743, y: 3.934375, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.253125, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + center: {x: -4.6218743, y: 4.253125, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.16412242, z: -0.09999991, w: -0.16412258} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + center: {x: -4.9406247, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412242, y: -0.34850723, z: -0.16412258, w: -0.34850723} + distancesB: {x: 0.10178145, y: -0.16412279, z: 0.10178145, w: -0.16412216} + center: {x: -4.9406247, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.16412258, z: -0.09999991, w: -0.16412243} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + center: {x: -4.9406247, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412258, y: -0.34850723, z: -0.16412243, w: -0.34850723} + distancesB: {x: 0.10178145, y: -0.16412216, z: 0.10178145, w: -0.16412243} + center: {x: -4.9406247, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.6218743, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.16412279, z: 0.10178145, w: -0.16412216} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.6218743, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.6218743, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.16412216, z: 0.10178145, w: -0.16412243} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.6218743, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: -4.9406247, y: 4.5718746, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: -4.9406247, y: 4.890625, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + center: {x: -4.6218743, y: 4.5718746, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + center: {x: -4.6218743, y: 4.5718746, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + center: {x: -4.6218743, y: 4.890625, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.53749996, z: 0.53982145, w: 0.5398205} + center: {x: -4.6218743, y: 4.890625, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.1641237, z: -0.09999991, w: -0.16412257} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.1017818} + center: {x: -4.9406247, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1641237, y: -0.34850723, z: -0.16412257, w: -0.34850723} + distancesB: {x: 0.10178145, y: -0.16412348, z: 0.1017818, w: -0.16412257} + center: {x: -4.9406247, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: -0.16412257, z: -0.1118034, w: -0.17156953} + distancesB: {x: 0.21875048, y: 0.1017818, z: 0.22439204, w: 0.1133995} + center: {x: -4.9406247, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412257, y: -0.34850723, z: -0.17156953, w: -0.3520757} + distancesB: {x: 0.1017818, y: -0.16412257, z: 0.1133995, w: -0.17156968} + center: {x: -4.9406247, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.1017818} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.6218743, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.16412348, z: 0.1017818, w: -0.16412257} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.6218743, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.1017818, z: 0.22439204, w: 0.1133995} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: -4.6218743, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.1017818, y: -0.16412257, z: 0.1133995, w: -0.17156968} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: -4.6218743, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.303125, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.303125, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.303125, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.303125, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.9843748, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.9843748, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.9843748, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.9843748, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -4.303125, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -4.303125, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.21875048, z: 0.5398205, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: -4.303125, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: -4.303125, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.9843748, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.9843748, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: -3.9843748, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: -3.9843748, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.6656246, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.6656246, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.6656246, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.6656246, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.3468747, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.3468747, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.3468747, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.3468747, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.6656246, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.6656246, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.6656246, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.6656246, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.3468747, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.3468747, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.3468747, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.3468747, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.0281248, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.0281248, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.0281248, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.0281248, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.709375, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.709375, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.709375, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.709375, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.0281248, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.0281248, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.0281248, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.0281248, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.709375, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.709375, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.709375, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.709375, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.6656246, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.6656246, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.6656246, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.6656246, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.3468747, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.3468747, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.3468747, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.3468747, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.6656246, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.6656246, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: -3.6656246, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: -3.6656246, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.3468747, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.3468747, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: -3.3468747, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: -3.3468747, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.0281248, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.0281248, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.0281248, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.0281248, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.709375, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.709375, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.709375, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.709375, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -3.0281248, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -3.0281248, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: -3.0281248, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: -3.0281248, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.709375, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.709375, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: -2.709375, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: -2.709375, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: 0.159375, w: 0.159375} + firstChild: 10137 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: 0.47812498, w: 0.159375} + firstChild: 10145 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: 0.79687494, w: 0.159375} + firstChild: 10153 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: 1.1156249, w: 0.159375} + firstChild: 10161 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: 1.4343749, w: 0.159375} + firstChild: 10169 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: 1.7531248, w: 0.159375} + firstChild: 10177 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: 2.0718749, w: 0.159375} + firstChild: 10185 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: 2.3906248, w: 0.159375} + firstChild: 10193 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: 2.709375, w: 0.159375} + firstChild: 10201 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: 3.0281248, w: 0.159375} + firstChild: 10209 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: 3.3468747, w: 0.159375} + firstChild: 10217 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: 3.6656246, w: 0.159375} + firstChild: 10225 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: 3.9843748, w: 0.159375} + firstChild: 10233 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: -4.9406247, y: 5.2093754, z: 4.303125, w: 0.159375} + firstChild: 10241 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: -4.9406247, y: 5.528126, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + center: {x: -4.6218743, y: 5.2093754, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.5398205, z: 0.6518314, w: 0.6518306} + center: {x: -4.6218743, y: 5.2093754, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + center: {x: -4.6218743, y: 5.528126, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.6518306, z: 0.8726768, w: 0.87267613} + center: {x: -4.6218743, y: 5.528126, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.17156953, z: -0.3820693, w: -0.40362453} + distancesB: {x: 0.22439204, y: 0.1133995, z: 0.42875254, w: 0.3825394} + center: {x: -4.9406247, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: 10249 + - distancesA: {x: -0.17156953, y: -0.3520757, z: -0.40362453, w: -0.50737983} + distancesB: {x: 0.1133995, y: -0.17156968, z: 0.3825394, w: -0.40362495} + center: {x: -4.9406247, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: -0.40362453, z: -0.6947356, w: -0.70681894} + distancesB: {x: 0.42875254, y: 0.3825394, z: 0.72146326, w: 0.6949943} + center: {x: -4.9406247, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.40362453, y: -0.50737983, z: -0.70681894, w: -0.77078843} + distancesB: {x: 0.3825394, y: -0.40362495, z: 0.6949943, w: -0.7068194} + center: {x: -4.9406247, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.1133995, z: 0.42875254, w: 0.3825394} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: -4.6218743, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.1133995, y: -0.17156968, z: 0.3825394, w: -0.40362495} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: -4.6218743, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10257 + - distancesA: {x: 0.42875254, y: 0.3825394, z: 0.72146326, w: 0.6949943} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: -4.6218743, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.3825394, y: -0.40362495, z: 0.6949943, w: -0.7068194} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: -4.6218743, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5398205, y: 0.22439204, z: 0.6518306, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: -4.303125, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: -4.303125, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10265 + - distancesA: {x: 0.6518306, y: 0.42875254, z: 0.87267613, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: -4.303125, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: -4.303125, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: -3.9843748, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: -3.9843748, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10273 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: -3.9843748, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: -3.9843748, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: -3.6656246, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: -3.6656246, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10281 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: -3.6656246, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: -3.6656246, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: -3.3468747, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: -3.3468747, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10289 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: -3.3468747, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: -3.3468747, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: -3.0281248, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: -3.0281248, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10297 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: -3.0281248, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: -3.0281248, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: -2.709375, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: -2.709375, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10305 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: -2.709375, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: -2.709375, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.3906248, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.3906248, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.3906248, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.3906248, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.0718749, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.0718749, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.0718749, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.0718749, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.3906248, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.3906248, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.3906248, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.3906248, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.0718749, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.0718749, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.0718749, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.0718749, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.7531248, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.7531248, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.7531248, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.7531248, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.4343749, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.4343749, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.4343749, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.4343749, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.7531248, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.7531248, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.7531248, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.7531248, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.4343749, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.4343749, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.4343749, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.4343749, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.3906248, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.3906248, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.3906248, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.3906248, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.0718749, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.0718749, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.0718749, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.0718749, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.3906248, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.3906248, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: -2.3906248, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: -2.3906248, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -2.0718749, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -2.0718749, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: -2.0718749, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: -2.0718749, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.7531248, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.7531248, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.7531248, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.7531248, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.4343749, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.4343749, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.4343749, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.4343749, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.7531248, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.7531248, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: -1.7531248, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: -1.7531248, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.4343749, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.4343749, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: -1.4343749, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: -1.4343749, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.1156249, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.1156249, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.1156249, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.1156249, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.79687494, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.79687494, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.79687494, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.79687494, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.1156249, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.1156249, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.1156249, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.1156249, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.79687494, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.79687494, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.79687494, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.79687494, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.47812498, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.47812498, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.47812498, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.47812498, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.159375, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.159375, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.159375, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.159375, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.47812498, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.47812498, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.47812498, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.47812498, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.159375, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.159375, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.159375, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.159375, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.1156249, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.1156249, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.1156249, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.1156249, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.79687494, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.79687494, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.79687494, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.79687494, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -1.1156249, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -1.1156249, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: -1.1156249, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: -1.1156249, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.79687494, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.79687494, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: -0.79687494, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: -0.79687494, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.47812498, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.47812498, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.47812498, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.47812498, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.159375, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.159375, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.159375, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.159375, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.47812498, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.47812498, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: -0.47812498, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: -0.47812498, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: -0.159375, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: -0.159375, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: -0.159375, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: -0.159375, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: -2.3906248, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: -2.3906248, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10313 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: -2.3906248, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: -2.3906248, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: -2.0718749, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: -2.0718749, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10321 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: -2.0718749, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: -2.0718749, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: -1.7531248, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: -1.7531248, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10329 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: -1.7531248, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: -1.7531248, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: -1.4343749, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: -1.4343749, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10337 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: -1.4343749, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: -1.4343749, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: -1.1156249, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: -1.1156249, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10345 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: -1.1156249, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: -1.1156249, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: -0.79687494, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: -0.79687494, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10353 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: -0.79687494, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: -0.79687494, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: -0.47812498, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: -0.47812498, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10361 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: -0.47812498, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: -0.47812498, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: -0.159375, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: -0.159375, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10369 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: -0.159375, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: -0.159375, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31510967, y: -0.12002672, z: -0.14368741, w: 0.13350084} + distancesB: {x: -0.31510967, y: -0.120026715, z: -0.14368741, w: 0.13350049} + center: {x: 0.159375, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002672, y: -0.049999956, z: 0.13350084, w: 0.26875004} + distancesB: {x: -0.120026715, y: -0.049999956, z: 0.13350049, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368741, y: 0.13350083, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368741, y: 0.13350047, z: -0.09999991, w: 0.21875048} + center: {x: 0.159375, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13350047, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: 0.159375, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31510967, y: -0.120026715, z: -0.14368741, w: 0.13350049} + distancesB: {x: -0.31510967, y: -0.120026484, z: -0.1436874, w: 0.13350049} + center: {x: 0.47812498, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026715, y: -0.049999956, z: 0.13350049, w: 0.26875004} + distancesB: {x: -0.120026484, y: -0.049999956, z: 0.13350049, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368741, y: 0.13350047, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368741, y: 0.13350047, z: -0.09999991, w: 0.21875048} + center: {x: 0.47812498, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350047, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13350047, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: 0.47812498, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.159375, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.159375, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.159375, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.159375, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.47812498, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.47812498, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.47812498, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.47812498, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31510967, y: -0.12002649, z: -0.14368741, w: 0.13350049} + distancesB: {x: -0.31510967, y: -0.12002649, z: -0.1436874, w: 0.13350049} + center: {x: 0.79687494, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002649, y: -0.049999956, z: 0.13350049, w: 0.26875004} + distancesB: {x: -0.12002649, y: -0.049999956, z: 0.13350049, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368741, y: 0.13350047, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368741, y: 0.13350047, z: -0.09999991, w: 0.21875048} + center: {x: 0.79687494, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350047, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13350047, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: 0.79687494, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31510967, y: -0.12002649, z: -0.1436874, w: 0.13350049} + distancesB: {x: -0.31510967, y: -0.120026484, z: -0.1436874, w: 0.13350084} + center: {x: 1.1156249, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002649, y: -0.049999956, z: 0.13350049, w: 0.26875004} + distancesB: {x: -0.120026484, y: -0.049999956, z: 0.13350084, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368741, y: 0.13350047, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368741, y: 0.13350047, z: -0.09999991, w: 0.21875048} + center: {x: 1.1156249, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350047, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13350047, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: 1.1156249, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.79687494, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.79687494, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.79687494, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.79687494, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.1156249, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.1156249, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.1156249, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.1156249, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.159375, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.159375, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.159375, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.159375, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.47812498, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.47812498, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.47812498, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.47812498, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.159375, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.159375, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.159375, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.159375, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.47812498, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.47812498, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.47812498, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.47812498, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.79687494, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.79687494, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.79687494, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.79687494, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.1156249, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.1156249, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.1156249, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.1156249, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.79687494, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.79687494, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.79687494, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.79687494, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.1156249, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.1156249, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.1156249, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.1156249, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31510967, y: -0.120026484, z: -0.1436874, w: 0.13350084} + distancesB: {x: -0.31510967, y: -0.1200265, z: -0.1436874, w: 0.13350084} + center: {x: 1.4343749, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026484, y: -0.049999956, z: 0.13350084, w: 0.26875004} + distancesB: {x: -0.1200265, y: -0.049999956, z: 0.13350084, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368741, y: 0.13350047, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368741, y: 0.13350084, z: -0.09999991, w: 0.21875048} + center: {x: 1.4343749, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350047, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13350084, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: 1.4343749, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31510967, y: -0.1200265, z: -0.1436874, w: 0.13350084} + distancesB: {x: -0.31510967, y: -0.12002672, z: -0.1436874, w: 0.13350083} + center: {x: 1.7531248, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1200265, y: -0.049999956, z: 0.13350084, w: 0.26875004} + distancesB: {x: -0.12002672, y: -0.049999956, z: 0.13350083, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368741, y: 0.13350084, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368787, y: 0.13350083, z: -0.09999991, w: 0.21875048} + center: {x: 1.7531248, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350084, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13350083, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: 1.7531248, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.4343749, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.4343749, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.4343749, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.4343749, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.7531248, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.7531248, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.7531248, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.7531248, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31510967, y: -0.12002672, z: -0.1436874, w: 0.13350083} + distancesB: {x: -0.31510967, y: -0.120026484, z: -0.1436874, w: 0.13350084} + center: {x: 2.0718749, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002672, y: -0.049999956, z: 0.13350083, w: 0.26875004} + distancesB: {x: -0.120026484, y: -0.049999956, z: 0.13350084, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368787, y: 0.13350083, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368741, y: 0.13350083, z: -0.09999991, w: 0.21875048} + center: {x: 2.0718749, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13350083, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: 2.0718749, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31510967, y: -0.120026484, z: -0.1436874, w: 0.13350084} + distancesB: {x: -0.31510967, y: -0.1200265, z: -0.1436874, w: 0.13350084} + center: {x: 2.3906248, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026484, y: -0.049999956, z: 0.13350084, w: 0.26875004} + distancesB: {x: -0.1200265, y: -0.049999956, z: 0.13350084, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368741, y: 0.13350083, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.1436874, y: 0.13350083, z: -0.09999991, w: 0.21875048} + center: {x: 2.3906248, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13350083, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: 2.3906248, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.0718749, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.0718749, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.0718749, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.0718749, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.3906248, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.3906248, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.3906248, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.3906248, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.4343749, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.4343749, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.4343749, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.4343749, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.7531248, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.7531248, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.7531248, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.7531248, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.4343749, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.4343749, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.4343749, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.4343749, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.7531248, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.7531248, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.7531248, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.7531248, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.0718749, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.0718749, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.0718749, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.0718749, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.3906248, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.3906248, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.3906248, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.3906248, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.0718749, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.0718749, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.0718749, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.0718749, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.3906248, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.3906248, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.3906248, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.3906248, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31510967, y: -0.1200265, z: -0.14368741, w: 0.13350084} + distancesB: {x: -0.31510967, y: -0.120026484, z: -0.14368741, w: 0.13350084} + center: {x: 2.709375, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1200265, y: -0.049999956, z: 0.13350084, w: 0.26875004} + distancesB: {x: -0.120026484, y: -0.049999956, z: 0.13350084, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368741, y: 0.13350083, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368741, y: 0.13350083, z: -0.09999991, w: 0.21875048} + center: {x: 2.709375, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13350083, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: 2.709375, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.31510967, y: -0.120026484, z: -0.14368741, w: 0.13350084} + distancesB: {x: -0.3151093, y: -0.12002649, z: -0.14368741, w: 0.13350084} + center: {x: 3.0281248, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026484, y: -0.049999956, z: 0.13350084, w: 0.26875004} + distancesB: {x: -0.12002649, y: -0.049999956, z: 0.13350084, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368741, y: 0.13350083, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368741, y: 0.13350083, z: -0.09999991, w: 0.21875048} + center: {x: 3.0281248, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13350083, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: 3.0281248, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.709375, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.709375, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.709375, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.709375, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.0281248, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.0281248, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.0281248, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.0281248, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151093, y: -0.12002649, z: -0.14368741, w: 0.13350084} + distancesB: {x: -0.3151093, y: -0.12002672, z: -0.14368741, w: 0.13350084} + center: {x: 3.3468747, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002649, y: -0.049999956, z: 0.13350084, w: 0.26875004} + distancesB: {x: -0.12002672, y: -0.049999956, z: 0.13350084, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368741, y: 0.13350083, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368741, y: 0.13350083, z: -0.09999991, w: 0.21875048} + center: {x: 3.3468747, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13350083, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: 3.3468747, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151093, y: -0.12002672, z: -0.14368741, w: 0.13350084} + distancesB: {x: -0.3151093, y: -0.120026484, z: -0.1436874, w: 0.13350084} + center: {x: 3.6656246, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002672, y: -0.049999956, z: 0.13350084, w: 0.26875004} + distancesB: {x: -0.120026484, y: -0.049999956, z: 0.13350084, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368741, y: 0.13350083, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368741, y: 0.13350083, z: -0.09999991, w: 0.21875048} + center: {x: 3.6656246, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13350083, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: 3.6656246, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.3468747, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.3468747, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.3468747, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.3468747, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.6656246, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.6656246, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.6656246, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.6656246, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.709375, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.709375, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.709375, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.709375, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.0281248, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.0281248, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.0281248, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.0281248, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.709375, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.709375, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.709375, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.709375, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.0281248, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.0281248, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.0281248, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.0281248, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.3468747, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.3468747, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.3468747, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.3468747, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.6656246, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.6656246, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.6656246, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.6656246, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.3468747, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.3468747, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.3468747, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.3468747, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.6656246, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.6656246, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.6656246, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.6656246, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151093, y: -0.1200265, z: -0.1436874, w: 0.13350084} + distancesB: {x: -0.3151093, y: -0.120026484, z: -0.1436874, w: 0.13350084} + center: {x: 3.9843748, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1200265, y: -0.049999956, z: 0.13350084, w: 0.26875004} + distancesB: {x: -0.120026484, y: -0.049999956, z: 0.13350084, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368741, y: 0.13350083, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368741, y: 0.13350083, z: -0.09999991, w: 0.21875048} + center: {x: 3.9843748, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13350083, y: 0.26875, z: 0.21875048, w: 0.5375008} + center: {x: 3.9843748, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151093, y: -0.120026484, z: -0.1436874, w: 0.13350084} + distancesB: {x: -0.3151093, y: -0.1200265, z: -0.1436874, w: 0.13350084} + center: {x: 4.303125, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026484, y: -0.049999956, z: 0.13350084, w: 0.26875004} + distancesB: {x: -0.1200265, y: -0.049999956, z: 0.13350084, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368741, y: 0.13350083, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.14368741, y: 0.13350083, z: -0.09999991, w: 0.21875048} + center: {x: 4.303125, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.13350083, y: 0.26875, z: 0.21875048, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.9843748, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.9843748, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.9843748, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.9843748, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 4.303125, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + center: {x: 4.303125, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 4.303125, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + center: {x: 4.303125, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3151093, y: -0.120026484, z: -0.1436874, w: 0.13350084} + distancesB: {x: -0.3631176, y: -0.18227313, z: -0.20391569, w: 0.035077635} + center: {x: 4.6218743, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026484, y: -0.049999956, z: 0.13350084, w: 0.26875004} + distancesB: {x: -0.18227313, y: -0.12004272, z: 0.035077635, w: 0.1335152} + center: {x: 4.6218743, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.14368741, y: 0.13350083, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.20391569, y: 0.035077628, z: -0.16412279, w: 0.10178145} + center: {x: 4.6218743, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.26875, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.035077628, y: 0.13351516, z: 0.10178145, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3631176, y: -0.18227313, z: -0.20391569, w: 0.035077635} + distancesB: {x: -0.51686305, y: -0.36311758, z: -0.38181642, w: -0.20391886} + center: {x: 4.9406247, y: 0.109375045, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.18227313, y: -0.12004272, z: 0.035077635, w: 0.1335152} + distancesB: {x: -0.36311758, y: -0.31511572, z: -0.20391886, w: -0.14369535} + center: {x: 4.9406247, y: 0.109375045, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.20391569, y: 0.035077628, z: -0.16412279, w: 0.10178145} + distancesB: {x: -0.38181642, y: -0.2039191, z: -0.34850723, w: -0.16412257} + center: {x: 4.9406247, y: 0.42812502, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.035077628, y: 0.13351516, z: 0.10178145, w: 0.21875048} + distancesB: {x: -0.2039191, y: -0.14369535, z: -0.16412257, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.12004279, y: -0.12013312, z: 0.1335152, w: 0.13359644} + center: {x: 4.6218743, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.12013312, y: -0.1200525, z: 0.13359644, w: 0.13352399} + center: {x: 4.6218743, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.5375008} + distancesB: {x: 0.13351518, y: 0.1335964, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.1335964, y: 0.13352397, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12004279, y: -0.12013312, z: 0.1335152, w: 0.13359644} + distancesB: {x: -0.31511572, y: -0.31511006, z: -0.14369535, w: -0.1436874} + center: {x: 4.9406247, y: 0.109375045, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12013312, y: -0.1200525, z: 0.13359644, w: 0.13352399} + distancesB: {x: -0.31511006, y: -0.3151093, z: -0.1436874, w: -0.1436874} + center: {x: 4.9406247, y: 0.109375045, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13351518, y: 0.1335964, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14369535, y: -0.14368741, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.1335964, y: 0.13352397, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14368741, y: -0.14368741, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.16412279, y: 0.10178145, z: -0.16412216, w: 0.10178145} + center: {x: 4.6218743, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.16412216, y: 0.10178145, z: -0.16412236, w: 0.10178145} + center: {x: 4.6218743, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412279, y: 0.10178145, z: -0.16412216, w: 0.10178145} + distancesB: {x: -0.34850723, y: -0.16412257, z: -0.34850723, w: -0.16412279} + center: {x: 4.9406247, y: 0.746875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + distancesB: {x: -0.16412257, y: -0.09999991, z: -0.16412279, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412216, y: 0.10178145, z: -0.16412236, w: 0.10178145} + distancesB: {x: -0.34850723, y: -0.16412279, z: -0.34850723, w: -0.16412258} + center: {x: 4.9406247, y: 1.065625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + distancesB: {x: -0.16412279, y: -0.09999991, z: -0.16412258, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.12030248, y: -0.120156296, z: 0.1337488, w: 0.13361731} + center: {x: 4.6218743, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.120156296, y: -0.12006461, z: 0.13361731, w: 0.13353513} + center: {x: 4.6218743, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13374877, y: 0.13361728, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13361728, y: 0.13353512, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12030248, y: -0.120156296, z: 0.1337488, w: 0.13361731} + distancesB: {x: -0.3151093, y: -0.3151093, z: -0.1436874, w: -0.1436874} + center: {x: 4.9406247, y: 0.109375045, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120156296, y: -0.12006461, z: 0.13361731, w: 0.13353513} + distancesB: {x: -0.3151093, y: -0.3151093, z: -0.1436874, w: -0.14368741} + center: {x: 4.9406247, y: 0.109375045, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13374877, y: 0.13361728, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.1436874, y: -0.14368741, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13361728, y: 0.13353512, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14368741, y: -0.14368741, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.12006461, y: -0.12018183, z: 0.13353513, w: 0.13364027} + center: {x: 4.6218743, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.12018183, y: -0.12007892, z: 0.13364027, w: 0.13354774} + center: {x: 4.6218743, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13353512, y: 0.13364026, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13364026, y: 0.13354771, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12006461, y: -0.12018183, z: 0.13353513, w: 0.13364027} + distancesB: {x: -0.3151093, y: -0.3151093, z: -0.14368741, w: -0.1436874} + center: {x: 4.9406247, y: 0.109375045, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12018183, y: -0.12007892, z: 0.13364027, w: 0.13354774} + distancesB: {x: -0.3151093, y: -0.3151093, z: -0.1436874, w: -0.1436874} + center: {x: 4.9406247, y: 0.109375045, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13353512, y: 0.13364026, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14368741, y: -0.1436874, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13364026, y: 0.13354771, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.1436874, y: -0.1436874, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.9843748, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.9843748, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.9843748, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.9843748, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 4.303125, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + center: {x: 4.303125, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 4.303125, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + center: {x: 4.303125, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.9843748, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.9843748, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.9843748, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.9843748, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 4.303125, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + center: {x: 4.303125, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 4.303125, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + center: {x: 4.303125, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.16412236, y: 0.10178145, z: -0.16412216, w: 0.10178145} + center: {x: 4.6218743, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.16412216, y: 0.10178145, z: -0.16412236, w: 0.101781085} + center: {x: 4.6218743, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.101781085, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412236, y: 0.10178145, z: -0.16412216, w: 0.10178145} + distancesB: {x: -0.34850723, y: -0.16412258, z: -0.34850723, w: -0.16412267} + center: {x: 4.9406247, y: 1.384375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + distancesB: {x: -0.16412258, y: -0.09999991, z: -0.16412267, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412216, y: 0.10178145, z: -0.16412236, w: 0.101781085} + distancesB: {x: -0.34850723, y: -0.16412267, z: -0.34850723, w: -0.16412228} + center: {x: 4.9406247, y: 1.7031249, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.101781085, w: 0.21875048} + distancesB: {x: -0.16412267, y: -0.09999991, z: -0.16412228, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.16412236, y: 0.101781085, z: -0.16412279, w: 0.10178145} + center: {x: 4.6218743, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.101781085, y: 0.21875048, z: 0.10178145, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.16412279, y: 0.10178145, z: -0.16412257, w: 0.10178145} + center: {x: 4.6218743, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412236, y: 0.101781085, z: -0.16412279, w: 0.10178145} + distancesB: {x: -0.34850723, y: -0.16412228, z: -0.34850723, w: -0.16412239} + center: {x: 4.9406247, y: 2.021875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.101781085, y: 0.21875048, z: 0.10178145, w: 0.21875048} + distancesB: {x: -0.16412228, y: -0.09999991, z: -0.16412239, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412279, y: 0.10178145, z: -0.16412257, w: 0.10178145} + distancesB: {x: -0.34850723, y: -0.16412239, z: -0.34850723, w: -0.16412286} + center: {x: 4.9406247, y: 2.3406248, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + distancesB: {x: -0.16412239, y: -0.09999991, z: -0.16412286, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.120078914, y: -0.12003061, z: 0.13354772, w: 0.13350426} + center: {x: 4.6218743, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.12003061, y: -0.12003688, z: 0.13350426, w: 0.13350989} + center: {x: 4.6218743, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13354771, y: 0.13350424, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13350424, y: 0.13350987, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120078914, y: -0.12003061, z: 0.13354772, w: 0.13350426} + distancesB: {x: -0.3151093, y: -0.3151093, z: -0.1436874, w: -0.14368787} + center: {x: 4.9406247, y: 0.109375045, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12003061, y: -0.12003688, z: 0.13350426, w: 0.13350989} + distancesB: {x: -0.3151093, y: -0.3151093, z: -0.14368787, w: -0.14368741} + center: {x: 4.9406247, y: 0.109375045, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13354771, y: 0.13350424, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.1436874, y: -0.14368787, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350424, y: 0.13350987, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14368787, y: -0.14368741, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.12003688, y: -0.12003608, z: 0.13350989, w: 0.13350917} + center: {x: 4.6218743, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.12003608, y: -0.120031156, z: 0.13350917, w: 0.13350473} + center: {x: 4.6218743, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13350989, y: 0.13350916, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13350916, y: 0.13350472, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12003688, y: -0.12003608, z: 0.13350989, w: 0.13350917} + distancesB: {x: -0.3151093, y: -0.3151093, z: -0.14368741, w: -0.14368741} + center: {x: 4.9406247, y: 0.109375045, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12003608, y: -0.120031156, z: 0.13350917, w: 0.13350473} + distancesB: {x: -0.3151093, y: -0.3151093, z: -0.14368741, w: -0.1436874} + center: {x: 4.9406247, y: 0.109375045, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350989, y: 0.13350916, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14368741, y: -0.14368741, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350916, y: 0.13350472, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14368741, y: -0.14368741, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.120031156, y: -0.120026484, z: 0.13350473, w: 0.13351619} + center: {x: 4.6218743, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.120026484, y: -0.120026484, z: 0.13351619, w: 0.13352044} + center: {x: 4.6218743, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13350472, y: 0.13351616, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13351616, y: 0.13352044, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120031156, y: -0.120026484, z: 0.13350473, w: 0.13351619} + distancesB: {x: -0.3151093, y: -0.3151093, z: -0.1436874, w: -0.1436874} + center: {x: 4.9406247, y: 0.109375045, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026484, y: -0.120026484, z: 0.13351619, w: 0.13352044} + distancesB: {x: -0.3151093, y: -0.3151093, z: -0.1436874, w: -0.1436874} + center: {x: 4.9406247, y: 0.109375045, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350472, y: 0.13351616, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14368741, y: -0.1436874, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13351616, y: 0.13352044, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.1436874, y: -0.1436874, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.120026484, y: -0.12002649, z: 0.13352044, w: 0.13352522} + center: {x: 4.6218743, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.12002649, y: -0.12002672, z: 0.13352522, w: 0.13350084} + center: {x: 4.6218743, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13352044, y: 0.1335252, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.1335252, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026484, y: -0.12002649, z: 0.13352044, w: 0.13352522} + distancesB: {x: -0.3151093, y: -0.3151093, z: -0.1436874, w: -0.14368741} + center: {x: 4.9406247, y: 0.109375045, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002649, y: -0.12002672, z: 0.13352522, w: 0.13350084} + distancesB: {x: -0.3151093, y: -0.31510967, z: -0.14368741, w: -0.14368741} + center: {x: 4.9406247, y: 0.109375045, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13352044, y: 0.1335252, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.1436874, y: -0.14368741, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.1335252, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14368741, y: -0.14368741, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.159375, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.159375, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.47812498, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.47812498, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 0.79687494, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 0.79687494, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.1156249, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.1156249, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.4343749, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.4343749, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 1.7531248, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 1.7531248, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.0718749, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.0718749, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.3906248, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.3906248, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.159375, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.159375, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: 0.159375, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.47812498, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.47812498, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: 0.47812498, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.12002655, z: 0.26875004, w: 0.1335009} + distancesB: {x: -0.049999956, y: -0.120026834, z: 0.26875004, w: 0.13350083} + center: {x: 0.159375, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002655, y: -0.31510958, z: 0.1335009, w: -0.14368732} + distancesB: {x: -0.120026834, y: -0.31510967, z: 0.13350083, w: -0.14368756} + center: {x: 0.159375, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13350089, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + center: {x: 0.159375, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350089, y: -0.14368732, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13350083, y: -0.14368756, z: 0.21875048, w: -0.09999991} + center: {x: 0.159375, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.120026834, z: 0.26875004, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.1200277, z: 0.26875004, w: 0.13350083} + center: {x: 0.47812498, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026834, y: -0.31510967, z: 0.13350083, w: -0.14368756} + distancesB: {x: -0.1200277, y: -0.31511, z: 0.13350083, w: -0.14368841} + center: {x: 0.47812498, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + center: {x: 0.47812498, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: -0.14368756, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13350083, y: -0.14368843, z: 0.21875048, w: -0.09999991} + center: {x: 0.47812498, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.159375, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.159375, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.159375, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.159375, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.47812498, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.47812498, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.47812498, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.47812498, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 0.79687494, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 0.79687494, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: 0.79687494, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.1156249, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.1156249, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: 1.1156249, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.1200277, z: 0.26875004, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.12002914, z: 0.26875004, w: 0.13350083} + center: {x: 0.79687494, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1200277, y: -0.31511, z: 0.13350083, w: -0.14368829} + distancesB: {x: -0.12002914, y: -0.31511053, z: 0.13350083, w: -0.14368974} + center: {x: 0.79687494, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + center: {x: 0.79687494, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: -0.14368829, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13350083, y: -0.14368974, z: 0.21875048, w: -0.09999991} + center: {x: 0.79687494, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.12002914, z: 0.26875004, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.120026715, z: 0.26875004, w: 0.13350083} + center: {x: 1.1156249, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002914, y: -0.31511053, z: 0.13350083, w: -0.14368974} + distancesB: {x: -0.120026715, y: -0.31511137, z: 0.13350083, w: -0.1436914} + center: {x: 1.1156249, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + center: {x: 1.1156249, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: -0.14368974, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13350083, y: -0.14369142, z: 0.21875048, w: -0.09999991} + center: {x: 1.1156249, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.79687494, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.79687494, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.79687494, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.79687494, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.1156249, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.1156249, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.1156249, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.1156249, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.159375, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.159375, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.159375, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.159375, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.47812498, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.47812498, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.47812498, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.47812498, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.159375, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.159375, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.159375, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.159375, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.47812498, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.47812498, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.47812498, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.47812498, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.79687494, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.79687494, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.79687494, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.79687494, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.1156249, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.1156249, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.1156249, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.1156249, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.79687494, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.79687494, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.79687494, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.79687494, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.1156249, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.1156249, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.1156249, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.1156249, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.4343749, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.4343749, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: 1.4343749, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 1.7531248, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 1.7531248, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: 1.7531248, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.12002672, z: 0.26875004, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.120026715, z: 0.26875004, w: 0.13350083} + center: {x: 1.4343749, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002672, y: -0.31511137, z: 0.13350083, w: -0.1436914} + distancesB: {x: -0.120026715, y: -0.31511235, z: 0.13350083, w: -0.14369357} + center: {x: 1.4343749, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + center: {x: 1.4343749, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: -0.14369142, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13350083, y: -0.14369358, z: 0.21875048, w: -0.09999991} + center: {x: 1.4343749, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.120026715, z: 0.26875004, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.12002649, z: 0.26875004, w: 0.13350083} + center: {x: 1.7531248, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026715, y: -0.31511235, z: 0.13350083, w: -0.14369357} + distancesB: {x: -0.12002649, y: -0.31511354, z: 0.13350083, w: -0.14369619} + center: {x: 1.7531248, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + center: {x: 1.7531248, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: -0.14369358, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13350083, y: -0.1436962, z: 0.21875048, w: -0.09999991} + center: {x: 1.7531248, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.4343749, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.4343749, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.4343749, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.4343749, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.7531248, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.7531248, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.7531248, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.7531248, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.0718749, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.0718749, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: 2.0718749, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.3906248, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.3906248, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: 2.3906248, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.12002649, z: 0.26875004, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.120026484, z: 0.26875004, w: 0.13350083} + center: {x: 2.0718749, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002649, y: -0.31511354, z: 0.13350083, w: -0.14369619} + distancesB: {x: -0.120026484, y: -0.31511497, z: 0.13350083, w: -0.14369932} + center: {x: 2.0718749, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + center: {x: 2.0718749, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: -0.1436962, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13350083, y: -0.14369933, z: 0.21875048, w: -0.09999991} + center: {x: 2.0718749, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.120026484, z: 0.26875004, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.120026484, z: 0.26875004, w: 0.13350084} + center: {x: 2.3906248, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026484, y: -0.31511497, z: 0.13350083, w: -0.14369932} + distancesB: {x: -0.120026484, y: -0.31511015, z: 0.13350084, w: -0.14368922} + center: {x: 2.3906248, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + center: {x: 2.3906248, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: -0.14369933, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13350083, y: -0.14368923, z: 0.21875048, w: -0.09999991} + center: {x: 2.3906248, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.0718749, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.0718749, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.0718749, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.0718749, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.3906248, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.3906248, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.3906248, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.3906248, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.4343749, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.4343749, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.4343749, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.4343749, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.7531248, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.7531248, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.7531248, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.7531248, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.4343749, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.4343749, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.4343749, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.4343749, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.7531248, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.7531248, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.7531248, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.7531248, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.0718749, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.0718749, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.0718749, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.0718749, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.3906248, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.3906248, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.3906248, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.3906248, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.0718749, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.0718749, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.0718749, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.0718749, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.3906248, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.3906248, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.3906248, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.3906248, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 2.709375, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 2.709375, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.0281248, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.0281248, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.3468747, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.3468747, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.6656246, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.6656246, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 3.9843748, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 3.9843748, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + distancesB: {x: -0.6874999, y: -0.6874999, z: -0.3687499, w: -0.3687499} + center: {x: 4.303125, y: -0.5281249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + distancesB: {x: -0.36874995, y: -0.36874995, z: -0.049999956, w: -0.049999956} + center: {x: 4.303125, y: -0.20937495, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.12002672, y: -0.120026715, z: 0.13350084, w: 0.13350049} + center: {x: 4.6218743, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.120026715, y: -0.120026484, z: 0.13350049, w: 0.13350049} + center: {x: 4.6218743, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13350083, y: 0.13350047, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13350047, y: 0.13350047, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002672, y: -0.120026715, z: 0.13350084, w: 0.13350049} + distancesB: {x: -0.31510967, y: -0.31510967, z: -0.14368741, w: -0.14368741} + center: {x: 4.9406247, y: 0.109375045, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026715, y: -0.120026484, z: 0.13350049, w: 0.13350049} + distancesB: {x: -0.31510967, y: -0.31510967, z: -0.14368741, w: -0.1436874} + center: {x: 4.9406247, y: 0.109375045, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.13350047, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14368741, y: -0.14368741, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350047, y: 0.13350047, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14368741, y: -0.14368741, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.12002649, y: -0.12002649, z: 0.13350049, w: 0.13350049} + center: {x: 4.6218743, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.12002649, y: -0.120026484, z: 0.13350049, w: 0.13350084} + center: {x: 4.6218743, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13350047, y: 0.13350047, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13350047, y: 0.13350047, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002649, y: -0.12002649, z: 0.13350049, w: 0.13350049} + distancesB: {x: -0.31510967, y: -0.31510967, z: -0.14368741, w: -0.1436874} + center: {x: 4.9406247, y: 0.109375045, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002649, y: -0.120026484, z: 0.13350049, w: 0.13350084} + distancesB: {x: -0.31510967, y: -0.31510967, z: -0.1436874, w: -0.1436874} + center: {x: 4.9406247, y: 0.109375045, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350047, y: 0.13350047, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14368741, y: -0.14368741, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350047, y: 0.13350047, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14368741, y: -0.14368741, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.120026484, y: -0.1200265, z: 0.13350084, w: 0.13350084} + center: {x: 4.6218743, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.1200265, y: -0.12002672, z: 0.13350084, w: 0.13350083} + center: {x: 4.6218743, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13350047, y: 0.13350084, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13350084, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026484, y: -0.1200265, z: 0.13350084, w: 0.13350084} + distancesB: {x: -0.31510967, y: -0.31510967, z: -0.1436874, w: -0.1436874} + center: {x: 4.9406247, y: 0.109375045, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1200265, y: -0.12002672, z: 0.13350084, w: 0.13350083} + distancesB: {x: -0.31510967, y: -0.31510967, z: -0.1436874, w: -0.1436874} + center: {x: 4.9406247, y: 0.109375045, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350047, y: 0.13350084, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14368741, y: -0.14368741, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350084, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14368741, y: -0.14368787, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.12002672, y: -0.120026484, z: 0.13350083, w: 0.13350084} + center: {x: 4.6218743, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.120026484, y: -0.1200265, z: 0.13350084, w: 0.13350084} + center: {x: 4.6218743, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002672, y: -0.120026484, z: 0.13350083, w: 0.13350084} + distancesB: {x: -0.31510967, y: -0.31510967, z: -0.1436874, w: -0.1436874} + center: {x: 4.9406247, y: 0.109375045, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026484, y: -0.1200265, z: 0.13350084, w: 0.13350084} + distancesB: {x: -0.31510967, y: -0.31510967, z: -0.1436874, w: -0.1436874} + center: {x: 4.9406247, y: 0.109375045, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14368787, y: -0.14368741, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14368741, y: -0.1436874, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 2.709375, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 2.709375, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: 2.709375, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.0281248, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.0281248, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: 3.0281248, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.12002649, z: 0.26875004, w: 0.13350084} + distancesB: {x: -0.049999956, y: -0.12002672, z: 0.26875004, w: 0.13350083} + center: {x: 2.709375, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002649, y: -0.31511036, z: 0.13350084, w: -0.14368922} + distancesB: {x: -0.12002672, y: -0.31511104, z: 0.13350083, w: -0.1436907} + center: {x: 2.709375, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + center: {x: 2.709375, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: -0.14368923, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13350083, y: -0.14369072, z: 0.21875048, w: -0.09999991} + center: {x: 2.709375, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.12002672, z: 0.26875004, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.12002672, z: 0.26875004, w: 0.13350083} + center: {x: 3.0281248, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002672, y: -0.31511104, z: 0.13350083, w: -0.1436907} + distancesB: {x: -0.12002672, y: -0.31511003, z: 0.13350083, w: -0.14368846} + center: {x: 3.0281248, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + center: {x: 3.0281248, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: -0.14369072, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13350083, y: -0.14368847, z: 0.21875048, w: -0.09999991} + center: {x: 3.0281248, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.709375, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.709375, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.709375, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.709375, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.0281248, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.0281248, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.0281248, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.0281248, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.3468747, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.3468747, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: 3.3468747, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.6656246, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.6656246, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: 3.6656246, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.12002672, z: 0.26875004, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.120026484, z: 0.26875004, w: 0.13350083} + center: {x: 3.3468747, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002672, y: -0.31511003, z: 0.13350083, w: -0.14368846} + distancesB: {x: -0.120026484, y: -0.31511047, z: 0.13350083, w: -0.14368962} + center: {x: 3.3468747, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + center: {x: 3.3468747, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: -0.14368847, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13350083, y: -0.14368963, z: 0.21875048, w: -0.09999991} + center: {x: 3.3468747, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.120026484, z: 0.26875004, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.120026484, z: 0.26875004, w: 0.13350083} + center: {x: 3.6656246, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026484, y: -0.31511047, z: 0.13350083, w: -0.14368962} + distancesB: {x: -0.120026484, y: -0.31510928, z: 0.13350083, w: -0.14368758} + center: {x: 3.6656246, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + center: {x: 3.6656246, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: -0.14368963, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13350083, y: -0.1436876, z: 0.21875048, w: -0.09999991} + center: {x: 3.6656246, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.3468747, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.3468747, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.3468747, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.3468747, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.6656246, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.6656246, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.6656246, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.6656246, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.709375, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.709375, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.709375, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.709375, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.0281248, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.0281248, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.0281248, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.0281248, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.709375, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.709375, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.709375, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.709375, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.0281248, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.0281248, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.0281248, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.0281248, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.3468747, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.3468747, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.3468747, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.3468747, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.6656246, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.6656246, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.6656246, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.6656246, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.3468747, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.3468747, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.3468747, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.3468747, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.6656246, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.6656246, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.6656246, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.6656246, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.1200265, y: -0.120026484, z: 0.13350084, w: 0.13350084} + center: {x: 4.6218743, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.120026484, y: -0.12002649, z: 0.13350084, w: 0.13350084} + center: {x: 4.6218743, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1200265, y: -0.120026484, z: 0.13350084, w: 0.13350084} + distancesB: {x: -0.31510967, y: -0.31510967, z: -0.14368741, w: -0.14368741} + center: {x: 4.9406247, y: 0.109375045, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026484, y: -0.12002649, z: 0.13350084, w: 0.13350084} + distancesB: {x: -0.31510967, y: -0.3151093, z: -0.14368741, w: -0.14368741} + center: {x: 4.9406247, y: 0.109375045, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14368741, y: -0.14368741, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14368741, y: -0.14368741, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.12002649, y: -0.12002672, z: 0.13350084, w: 0.13350084} + center: {x: 4.6218743, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.12002672, y: -0.120026484, z: 0.13350084, w: 0.13350084} + center: {x: 4.6218743, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002649, y: -0.12002672, z: 0.13350084, w: 0.13350084} + distancesB: {x: -0.3151093, y: -0.3151093, z: -0.14368741, w: -0.14368741} + center: {x: 4.9406247, y: 0.109375045, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002672, y: -0.120026484, z: 0.13350084, w: 0.13350084} + distancesB: {x: -0.3151093, y: -0.3151093, z: -0.14368741, w: -0.1436874} + center: {x: 4.9406247, y: 0.109375045, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14368741, y: -0.14368741, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14368741, y: -0.14368741, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 3.9843748, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + center: {x: 3.9843748, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + center: {x: 3.9843748, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + center: {x: 4.303125, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.5875} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5875, w: 0.53749996} + distancesB: {x: 0.26875, y: 0.26875, z: 0.53749996, w: 0.53749996} + center: {x: 4.303125, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.120026484, z: 0.26875004, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.120026484, z: 0.26875004, w: 0.13350083} + center: {x: 3.9843748, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026484, y: -0.31510928, z: 0.13350083, w: -0.14368758} + distancesB: {x: -0.120026484, y: -0.3151093, z: 0.13350083, w: -0.14368747} + center: {x: 3.9843748, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + center: {x: 3.9843748, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: -0.1436876, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13350083, y: -0.14368749, z: 0.21875048, w: -0.09999991} + center: {x: 3.9843748, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.120026484, z: 0.26875004, w: 0.13350083} + distancesB: {x: -0.049999956, y: -0.12002672, z: 0.26875004, w: 0.13350083} + center: {x: 4.303125, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026484, y: -0.3151093, z: 0.13350083, w: -0.14368747} + distancesB: {x: -0.12002672, y: -0.3151093, z: 0.13350083, w: -0.14368741} + center: {x: 4.303125, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.26875, y: 0.13350083, z: 0.53749996, w: 0.21875048} + center: {x: 4.303125, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: -0.14368749, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.13350083, y: -0.14368741, z: 0.21875048, w: -0.09999991} + center: {x: 4.303125, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.9843748, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.9843748, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.9843748, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.9843748, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + center: {x: 4.303125, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 4.303125, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + center: {x: 4.303125, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 4.303125, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.1200265, y: -0.120026484, z: 0.13350084, w: 0.13350084} + center: {x: 4.6218743, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.049999956, z: 0.26875004, w: 0.26875004} + distancesB: {x: -0.120026484, y: -0.1200265, z: 0.13350084, w: 0.13350084} + center: {x: 4.6218743, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.26875, z: 0.5375008, w: 0.53749996} + distancesB: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1200265, y: -0.120026484, z: 0.13350084, w: 0.13350084} + distancesB: {x: -0.3151093, y: -0.3151093, z: -0.1436874, w: -0.1436874} + center: {x: 4.9406247, y: 0.109375045, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026484, y: -0.1200265, z: 0.13350084, w: 0.13350084} + distancesB: {x: -0.3151093, y: -0.3151093, z: -0.1436874, w: -0.1436874} + center: {x: 4.9406247, y: 0.109375045, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14368741, y: -0.14368741, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.13350083, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.14368741, y: -0.14368741, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.42812502, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.049999956, y: -0.12002672, z: 0.26875004, w: 0.13350083} + distancesB: {x: -0.120026484, y: -0.18227313, z: 0.13350084, w: 0.035077635} + center: {x: 4.6218743, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.12002672, y: -0.3151093, z: 0.13350083, w: -0.14368741} + distancesB: {x: -0.18227313, y: -0.36311758, z: 0.035077635, w: -0.20391886} + center: {x: 4.6218743, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.26875, y: 0.13350083, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.13350083, y: 0.035077628, z: 0.21875048, w: 0.10178145} + center: {x: 4.6218743, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: -0.14368741, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.035077628, y: -0.2039191, z: 0.10178145, w: -0.16412257} + center: {x: 4.6218743, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.120026484, y: -0.18227313, z: 0.13350084, w: 0.035077635} + distancesB: {x: -0.3151093, y: -0.3631176, z: -0.1436874, w: -0.20391569} + center: {x: 4.9406247, y: 0.109375045, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.18227313, y: -0.36311758, z: 0.035077635, w: -0.20391886} + distancesB: {x: -0.3631176, y: -0.51686305, z: -0.20391569, w: -0.38181642} + center: {x: 4.9406247, y: 0.109375045, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.13350083, y: 0.035077628, z: 0.21875048, w: 0.10178145} + distancesB: {x: -0.14368741, y: -0.20391569, z: -0.09999991, w: -0.16412279} + center: {x: 4.9406247, y: 0.42812502, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.035077628, y: -0.2039191, z: 0.10178145, w: -0.16412257} + distancesB: {x: -0.20391569, y: -0.38181642, z: -0.16412279, w: -0.34850723} + center: {x: 4.9406247, y: 0.42812502, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 0.746875, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.065625, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 0.746875, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.065625, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + center: {x: 4.6218743, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.10178145, y: -0.16412257, z: 0.10178145, w: -0.16412279} + center: {x: 4.6218743, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + center: {x: 4.6218743, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.10178145, y: -0.16412279, z: 0.10178145, w: -0.16412258} + center: {x: 4.6218743, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + distancesB: {x: -0.09999991, y: -0.16412279, z: -0.09999991, w: -0.16412216} + center: {x: 4.9406247, y: 0.746875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.16412257, z: 0.10178145, w: -0.16412279} + distancesB: {x: -0.16412279, y: -0.34850723, z: -0.16412216, w: -0.34850723} + center: {x: 4.9406247, y: 0.746875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + distancesB: {x: -0.09999991, y: -0.16412216, z: -0.09999991, w: -0.16412236} + center: {x: 4.9406247, y: 1.065625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.16412279, z: 0.10178145, w: -0.16412258} + distancesB: {x: -0.16412216, y: -0.34850723, z: -0.16412236, w: -0.34850723} + center: {x: 4.9406247, y: 1.065625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.9843748, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.9843748, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.9843748, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.9843748, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + center: {x: 4.303125, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 4.303125, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + center: {x: 4.303125, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 4.303125, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.9843748, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.9843748, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.9843748, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.9843748, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + center: {x: 4.303125, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 4.303125, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + center: {x: 4.303125, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 4.303125, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.384375, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 1.7031249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.384375, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 1.7031249, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + center: {x: 4.6218743, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.10178145, y: -0.16412258, z: 0.10178145, w: -0.16412267} + center: {x: 4.6218743, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.101781085} + center: {x: 4.6218743, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.10178145, y: -0.16412267, z: 0.101781085, w: -0.16412228} + center: {x: 4.6218743, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + distancesB: {x: -0.09999991, y: -0.16412236, z: -0.09999991, w: -0.16412216} + center: {x: 4.9406247, y: 1.384375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.16412258, z: 0.10178145, w: -0.16412267} + distancesB: {x: -0.16412236, y: -0.34850723, z: -0.16412216, w: -0.34850723} + center: {x: 4.9406247, y: 1.384375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.101781085} + distancesB: {x: -0.09999991, y: -0.16412216, z: -0.09999991, w: -0.16412236} + center: {x: 4.9406247, y: 1.7031249, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.16412267, z: 0.101781085, w: -0.16412228} + distancesB: {x: -0.16412216, y: -0.34850723, z: -0.16412236, w: -0.34850723} + center: {x: 4.9406247, y: 1.7031249, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.021875, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.3406248, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.021875, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.3406248, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.101781085, z: 0.21875048, w: 0.10178145} + center: {x: 4.6218743, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.101781085, y: -0.16412228, z: 0.10178145, w: -0.16412239} + center: {x: 4.6218743, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + center: {x: 4.6218743, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.10178145, y: -0.16412239, z: 0.10178145, w: -0.16412286} + center: {x: 4.6218743, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.101781085, z: 0.21875048, w: 0.10178145} + distancesB: {x: -0.09999991, y: -0.16412236, z: -0.09999991, w: -0.16412279} + center: {x: 4.9406247, y: 2.021875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.101781085, y: -0.16412228, z: 0.10178145, w: -0.16412239} + distancesB: {x: -0.16412236, y: -0.34850723, z: -0.16412279, w: -0.34850723} + center: {x: 4.9406247, y: 2.021875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + distancesB: {x: -0.09999991, y: -0.16412279, z: -0.09999991, w: -0.16412257} + center: {x: 4.9406247, y: 2.3406248, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.16412239, z: 0.10178145, w: -0.16412286} + distancesB: {x: -0.16412279, y: -0.34850723, z: -0.16412257, w: -0.34850723} + center: {x: 4.9406247, y: 2.3406248, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.159375, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.159375, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.159375, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.159375, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.47812498, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.47812498, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.47812498, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.47812498, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.159375, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.159375, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.159375, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.159375, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.47812498, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.47812498, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.47812498, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.47812498, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.79687494, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.79687494, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.79687494, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.79687494, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.1156249, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.1156249, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.1156249, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.1156249, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.79687494, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.79687494, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.79687494, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.79687494, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.1156249, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.1156249, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.1156249, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.1156249, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.159375, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.159375, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.159375, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.159375, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.47812498, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.47812498, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.47812498, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.47812498, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.159375, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.159375, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: 0.159375, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: 0.159375, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.47812498, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.47812498, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: 0.47812498, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: 0.47812498, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.79687494, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.79687494, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.79687494, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.79687494, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.1156249, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.1156249, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.1156249, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.1156249, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 0.79687494, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 0.79687494, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: 0.79687494, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: 0.79687494, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.1156249, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.1156249, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: 1.1156249, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: 1.1156249, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.4343749, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.4343749, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.4343749, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.4343749, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.7531248, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.7531248, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.7531248, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.7531248, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.4343749, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.4343749, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.4343749, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.4343749, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.7531248, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.7531248, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.7531248, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.7531248, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.0718749, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.0718749, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.0718749, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.0718749, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.3906248, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.3906248, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.3906248, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.3906248, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.0718749, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.0718749, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.0718749, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.0718749, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.3906248, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.3906248, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.3906248, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.3906248, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.4343749, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.4343749, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.4343749, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.4343749, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.7531248, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.7531248, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.7531248, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.7531248, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.4343749, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.4343749, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: 1.4343749, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: 1.4343749, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 1.7531248, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 1.7531248, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: 1.7531248, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: 1.7531248, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.0718749, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.0718749, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.0718749, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.0718749, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.3906248, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.3906248, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.3906248, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.3906248, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.0718749, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.0718749, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: 2.0718749, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: 2.0718749, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.3906248, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.3906248, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: 2.3906248, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: 2.3906248, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: 0.159375, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10377 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: 0.159375, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: 0.159375, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: 0.159375, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: 0.47812498, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10385 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: 0.47812498, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: 0.47812498, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: 0.47812498, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: 0.79687494, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10393 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: 0.79687494, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: 0.79687494, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: 0.79687494, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: 1.1156249, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10401 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: 1.1156249, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: 1.1156249, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: 1.1156249, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: 1.4343749, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10409 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: 1.4343749, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: 1.4343749, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: 1.4343749, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: 1.7531248, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10417 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: 1.7531248, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: 1.7531248, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: 1.7531248, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: 2.0718749, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10425 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: 2.0718749, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: 2.0718749, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: 2.0718749, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: 2.3906248, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10433 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: 2.3906248, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: 2.3906248, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: 2.3906248, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.709375, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.709375, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.709375, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.709375, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.0281248, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.0281248, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.0281248, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.0281248, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.709375, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.709375, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.709375, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.709375, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.0281248, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.0281248, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.0281248, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.0281248, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.3468747, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.3468747, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.3468747, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.3468747, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.6656246, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.6656246, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.6656246, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.6656246, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.3468747, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.3468747, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.3468747, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.3468747, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.6656246, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.6656246, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.6656246, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.6656246, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.709375, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.709375, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.709375, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.709375, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.0281248, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.0281248, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.0281248, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.0281248, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 2.709375, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 2.709375, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: 2.709375, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: 2.709375, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.0281248, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.0281248, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: 3.0281248, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: 3.0281248, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.3468747, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.3468747, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.3468747, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.3468747, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.6656246, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.6656246, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.6656246, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.6656246, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.3468747, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.3468747, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: 3.3468747, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: 3.3468747, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.6656246, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.6656246, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: 3.6656246, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: 3.6656246, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.9843748, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.9843748, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.9843748, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.9843748, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 4.303125, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + center: {x: 4.303125, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 4.303125, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + center: {x: 4.303125, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.9843748, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.9843748, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.9843748, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.9843748, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 4.303125, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + center: {x: 4.303125, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 4.303125, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + center: {x: 4.303125, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.16412257, y: 0.10178145, z: -0.16412279, w: 0.10178145} + center: {x: 4.6218743, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.16412279, y: 0.10178145, z: -0.16412257, w: 0.10178145} + center: {x: 4.6218743, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412257, y: 0.10178145, z: -0.16412279, w: 0.10178145} + distancesB: {x: -0.34850723, y: -0.1641226, z: -0.34850723, w: -0.1641224} + center: {x: 4.9406247, y: 2.6593752, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + distancesB: {x: -0.1641226, y: -0.09999991, z: -0.1641224, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412279, y: 0.10178145, z: -0.16412257, w: 0.10178145} + distancesB: {x: -0.34850723, y: -0.1641224, z: -0.34850723, w: -0.16412283} + center: {x: 4.9406247, y: 2.978125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + distancesB: {x: -0.1641224, y: -0.09999991, z: -0.16412283, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.16412257, y: 0.10178145, z: -0.16412279, w: 0.10178145} + center: {x: 4.6218743, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.16412279, y: 0.10178145, z: -0.16412279, w: 0.10178145} + center: {x: 4.6218743, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412257, y: 0.10178145, z: -0.16412279, w: 0.10178145} + distancesB: {x: -0.34850723, y: -0.16412283, z: -0.34850723, w: -0.16412297} + center: {x: 4.9406247, y: 3.296875, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + distancesB: {x: -0.16412283, y: -0.09999991, z: -0.16412297, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412279, y: 0.10178145, z: -0.16412279, w: 0.10178145} + distancesB: {x: -0.34850723, y: -0.16412297, z: -0.34850723, w: -0.16412242} + center: {x: 4.9406247, y: 3.615625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + distancesB: {x: -0.16412297, y: -0.09999991, z: -0.16412242, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.9843748, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.9843748, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.9843748, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.9843748, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 4.303125, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + center: {x: 4.303125, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 4.303125, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + center: {x: 4.303125, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 3.9843748, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + center: {x: 3.9843748, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: 3.9843748, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + center: {x: 3.9843748, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + center: {x: 4.303125, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.53749996, z: 0.21875048, w: 0.53749996} + center: {x: 4.303125, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + center: {x: 4.303125, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.53749996, z: 0.22439204, w: 0.5398205} + center: {x: 4.303125, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.16412279, y: 0.10178145, z: -0.16412216, w: 0.10178145} + center: {x: 4.6218743, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.16412216, y: 0.10178145, z: -0.16412243, w: 0.10178145} + center: {x: 4.6218743, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412279, y: 0.10178145, z: -0.16412216, w: 0.10178145} + distancesB: {x: -0.34850723, y: -0.16412242, z: -0.34850723, w: -0.16412258} + center: {x: 4.9406247, y: 3.934375, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + distancesB: {x: -0.16412242, y: -0.09999991, z: -0.16412258, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412216, y: 0.10178145, z: -0.16412243, w: 0.10178145} + distancesB: {x: -0.34850723, y: -0.16412258, z: -0.34850723, w: -0.16412243} + center: {x: 4.9406247, y: 4.253125, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.10178145, w: 0.21875048} + distancesB: {x: -0.16412258, y: -0.09999991, z: -0.16412243, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.09999991, w: 0.21875048} + distancesB: {x: -0.16412348, y: 0.10178145, z: -0.16412257, w: 0.1017818} + center: {x: 4.6218743, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.21875048, w: 0.5375008} + distancesB: {x: 0.10178145, y: 0.21875048, z: 0.1017818, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.09999991, y: 0.21875048, z: -0.1118034, w: 0.22439204} + distancesB: {x: -0.16412257, y: 0.1017818, z: -0.17156968, w: 0.1133995} + center: {x: 4.6218743, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.5375008, z: 0.22439204, w: 0.53982145} + distancesB: {x: 0.1017818, y: 0.21875048, z: 0.1133995, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412348, y: 0.10178145, z: -0.16412257, w: 0.1017818} + distancesB: {x: -0.34850723, y: -0.1641237, z: -0.34850723, w: -0.16412257} + center: {x: 4.9406247, y: 4.5718746, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: 0.21875048, z: 0.1017818, w: 0.21875048} + distancesB: {x: -0.1641237, y: -0.09999991, z: -0.16412257, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.16412257, y: 0.1017818, z: -0.17156968, w: 0.1133995} + distancesB: {x: -0.34850723, y: -0.16412257, z: -0.3520757, w: -0.17156953} + center: {x: 4.9406247, y: 4.890625, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.1017818, y: 0.21875048, z: 0.1133995, w: 0.22439204} + distancesB: {x: -0.16412257, y: -0.09999991, z: -0.17156953, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.5375008, z: 0.53749996, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53749996, y: 0.5375008, z: 0.5398205, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: 2.709375, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10441 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: 2.709375, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: 2.709375, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: 2.709375, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: 3.0281248, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10449 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: 3.0281248, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: 3.0281248, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: 3.0281248, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: 3.3468747, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10457 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: 3.3468747, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: 3.3468747, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: 3.3468747, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: 3.6656246, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10465 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: 3.6656246, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: 3.6656246, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: 3.6656246, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: 3.9843748, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10473 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + center: {x: 3.9843748, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: 3.9843748, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + center: {x: 3.9843748, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + center: {x: 4.303125, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10481 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.5398205, z: 0.42875254, w: 0.6518306} + center: {x: 4.303125, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + center: {x: 4.303125, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.6518306, z: 0.72146326, w: 0.87267613} + center: {x: 4.303125, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.22439204, z: -0.3820693, w: 0.42875254} + distancesB: {x: -0.17156968, y: 0.1133995, z: -0.40362495, w: 0.3825394} + center: {x: 4.6218743, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: 10489 + - distancesA: {x: 0.22439204, y: 0.53982145, z: 0.42875254, w: 0.6518314} + distancesB: {x: 0.1133995, y: 0.22439204, z: 0.3825394, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.3820693, y: 0.42875254, z: -0.6947356, w: 0.72146326} + distancesB: {x: -0.40362495, y: 0.3825394, z: -0.7068194, w: 0.6949943} + center: {x: 4.6218743, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.6518314, z: 0.72146326, w: 0.8726768} + distancesB: {x: 0.3825394, y: 0.42875254, z: 0.6949943, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.17156968, y: 0.1133995, z: -0.40362495, w: 0.3825394} + distancesB: {x: -0.3520757, y: -0.17156953, z: -0.50737983, w: -0.40362453} + center: {x: 4.9406247, y: 5.2093754, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.1133995, y: 0.22439204, z: 0.3825394, w: 0.42875254} + distancesB: {x: -0.17156953, y: -0.1118034, z: -0.40362453, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: -4.6218743, w: 0.159375} + firstChild: 10497 + - distancesA: {x: -0.40362495, y: 0.3825394, z: -0.7068194, w: 0.6949943} + distancesB: {x: -0.50737983, y: -0.40362453, z: -0.77078843, w: -0.70681894} + center: {x: 4.9406247, y: 5.528126, z: -4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.3825394, y: 0.42875254, z: 0.6949943, w: 0.72146326} + distancesB: {x: -0.40362453, y: -0.3820693, z: -0.70681894, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: -4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5398205, y: 0.53982145, z: 0.6518306, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518306, y: 0.6518314, z: 0.87267613, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: -4.303125, w: 0.159375} + firstChild: 10505 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: -3.9843748, w: 0.159375} + firstChild: 10513 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: -4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: -3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: -3.6656246, w: 0.159375} + firstChild: 10521 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: -3.3468747, w: 0.159375} + firstChild: 10529 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: -3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: -3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: -3.0281248, w: 0.159375} + firstChild: 10537 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: -2.709375, w: 0.159375} + firstChild: 10545 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: -3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: -2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: -2.3906248, w: 0.159375} + firstChild: 10553 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: -2.0718749, w: 0.159375} + firstChild: 10561 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: -2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: -2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: -1.7531248, w: 0.159375} + firstChild: 10569 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: -1.4343749, w: 0.159375} + firstChild: 10577 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: -1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: -1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: -1.1156249, w: 0.159375} + firstChild: 10585 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: -0.79687494, w: 0.159375} + firstChild: 10593 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: -1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: -0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: -0.47812498, w: 0.159375} + firstChild: 10601 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: -0.159375, w: 0.159375} + firstChild: 10609 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: -0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: -0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.159375, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.159375, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.159375, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.159375, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.47812498, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.47812498, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.47812498, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.47812498, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.159375, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.159375, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.159375, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.159375, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.47812498, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.47812498, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.47812498, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.47812498, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.79687494, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.79687494, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.79687494, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.79687494, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.1156249, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.1156249, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.1156249, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.1156249, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.79687494, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.79687494, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.79687494, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.79687494, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.1156249, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.1156249, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.1156249, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.1156249, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.159375, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.159375, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.159375, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.159375, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.47812498, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.47812498, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.47812498, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.47812498, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.159375, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.159375, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: 0.159375, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: 0.159375, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.47812498, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.47812498, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: 0.47812498, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: 0.47812498, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.79687494, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.79687494, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.79687494, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.79687494, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.1156249, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.1156249, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.1156249, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.1156249, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 0.79687494, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 0.79687494, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: 0.79687494, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: 0.79687494, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.1156249, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.1156249, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: 1.1156249, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: 1.1156249, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.4343749, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.4343749, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.4343749, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.4343749, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.7531248, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.7531248, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.7531248, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.7531248, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.4343749, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.4343749, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.4343749, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.4343749, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.7531248, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.7531248, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.7531248, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.7531248, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.0718749, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.0718749, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.0718749, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.0718749, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.3906248, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.3906248, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.3906248, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.3906248, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.0718749, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.0718749, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.0718749, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.0718749, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.3906248, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.3906248, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.3906248, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.3906248, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.4343749, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.4343749, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.4343749, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.4343749, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.7531248, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.7531248, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.7531248, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.7531248, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.4343749, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.4343749, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: 1.4343749, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: 1.4343749, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 1.7531248, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 1.7531248, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: 1.7531248, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: 1.7531248, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.0718749, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.0718749, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.0718749, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.0718749, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.3906248, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.3906248, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.3906248, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.3906248, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.0718749, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.0718749, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: 2.0718749, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: 2.0718749, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.3906248, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.3906248, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: 2.3906248, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: 2.3906248, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: 0.159375, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: 0.159375, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10617 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: 0.159375, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: 0.159375, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: 0.47812498, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: 0.47812498, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10625 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: 0.47812498, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: 0.47812498, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: 0.79687494, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: 0.79687494, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10633 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: 0.79687494, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: 0.79687494, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: 1.1156249, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: 1.1156249, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10641 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: 1.1156249, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: 1.1156249, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: 1.4343749, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: 1.4343749, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10649 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: 1.4343749, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: 1.4343749, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: 1.7531248, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: 1.7531248, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10657 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: 1.7531248, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: 1.7531248, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: 2.0718749, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: 2.0718749, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10665 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: 2.0718749, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: 2.0718749, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: 2.3906248, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: 2.3906248, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10673 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: 2.3906248, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: 2.3906248, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.709375, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.709375, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.709375, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.709375, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.0281248, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.0281248, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.0281248, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.0281248, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.709375, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.709375, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.709375, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.709375, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.0281248, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.0281248, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.0281248, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.0281248, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.3468747, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.3468747, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.3468747, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.3468747, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.6656246, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.6656246, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.6656246, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.6656246, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.3468747, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.3468747, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.3468747, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.3468747, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.6656246, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.6656246, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.6656246, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.6656246, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.709375, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.709375, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.709375, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.709375, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.0281248, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.0281248, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.0281248, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.0281248, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 2.709375, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 2.709375, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: 2.709375, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: 2.709375, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.0281248, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.0281248, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: 3.0281248, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: 3.0281248, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.3468747, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.3468747, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.3468747, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.3468747, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.6656246, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.6656246, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.6656246, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.6656246, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.3468747, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.3468747, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: 3.3468747, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: 3.3468747, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.6656246, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.6656246, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: 3.6656246, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: 3.6656246, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.9843748, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.9843748, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.9843748, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.9843748, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + center: {x: 4.303125, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 4.303125, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + center: {x: 4.303125, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 4.303125, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.9843748, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.9843748, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.9843748, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.9843748, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + center: {x: 4.303125, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 4.303125, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + center: {x: 4.303125, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 4.303125, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.6593752, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 2.978125, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.6593752, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 2.978125, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + center: {x: 4.6218743, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.10178145, y: -0.1641226, z: 0.10178145, w: -0.1641224} + center: {x: 4.6218743, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + center: {x: 4.6218743, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.10178145, y: -0.1641224, z: 0.10178145, w: -0.16412283} + center: {x: 4.6218743, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + distancesB: {x: -0.09999991, y: -0.16412257, z: -0.09999991, w: -0.16412279} + center: {x: 4.9406247, y: 2.6593752, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.1641226, z: 0.10178145, w: -0.1641224} + distancesB: {x: -0.16412257, y: -0.34850723, z: -0.16412279, w: -0.34850723} + center: {x: 4.9406247, y: 2.6593752, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + distancesB: {x: -0.09999991, y: -0.16412279, z: -0.09999991, w: -0.16412257} + center: {x: 4.9406247, y: 2.978125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.1641224, z: 0.10178145, w: -0.16412283} + distancesB: {x: -0.16412279, y: -0.34850723, z: -0.16412257, w: -0.34850723} + center: {x: 4.9406247, y: 2.978125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.296875, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.615625, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.296875, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.615625, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + center: {x: 4.6218743, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.10178145, y: -0.16412283, z: 0.10178145, w: -0.16412297} + center: {x: 4.6218743, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + center: {x: 4.6218743, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.10178145, y: -0.16412297, z: 0.10178145, w: -0.16412242} + center: {x: 4.6218743, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + distancesB: {x: -0.09999991, y: -0.16412257, z: -0.09999991, w: -0.16412279} + center: {x: 4.9406247, y: 3.296875, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.16412283, z: 0.10178145, w: -0.16412297} + distancesB: {x: -0.16412257, y: -0.34850723, z: -0.16412279, w: -0.34850723} + center: {x: 4.9406247, y: 3.296875, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + distancesB: {x: -0.09999991, y: -0.16412279, z: -0.09999991, w: -0.16412279} + center: {x: 4.9406247, y: 3.615625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.16412297, z: 0.10178145, w: -0.16412242} + distancesB: {x: -0.16412279, y: -0.34850723, z: -0.16412279, w: -0.34850723} + center: {x: 4.9406247, y: 3.615625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.9843748, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.9843748, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.9843748, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.9843748, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + center: {x: 4.303125, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 4.303125, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + center: {x: 4.303125, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 4.303125, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + center: {x: 3.9843748, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 3.9843748, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + center: {x: 3.9843748, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: 3.9843748, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.53749996, y: 0.21875048, z: 0.53749996, w: 0.21875048} + center: {x: 4.303125, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + center: {x: 4.303125, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.53749996, y: 0.21875048, z: 0.5398205, w: 0.22439204} + center: {x: 4.303125, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + center: {x: 4.303125, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 3.934375, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.253125, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 3.934375, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.253125, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + center: {x: 4.6218743, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.10178145, y: -0.16412242, z: 0.10178145, w: -0.16412258} + center: {x: 4.6218743, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + center: {x: 4.6218743, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.10178145, y: -0.16412258, z: 0.10178145, w: -0.16412243} + center: {x: 4.6218743, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + distancesB: {x: -0.09999991, y: -0.16412279, z: -0.09999991, w: -0.16412216} + center: {x: 4.9406247, y: 3.934375, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.16412242, z: 0.10178145, w: -0.16412258} + distancesB: {x: -0.16412279, y: -0.34850723, z: -0.16412216, w: -0.34850723} + center: {x: 4.9406247, y: 3.934375, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.10178145} + distancesB: {x: -0.09999991, y: -0.16412216, z: -0.09999991, w: -0.16412243} + center: {x: 4.9406247, y: 4.253125, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.16412258, z: 0.10178145, w: -0.16412243} + distancesB: {x: -0.16412216, y: -0.34850723, z: -0.16412243, w: -0.34850723} + center: {x: 4.9406247, y: 4.253125, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.5375008, w: 0.5375008} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.53749996, z: 0.5375008, w: 0.53749996} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + center: {x: 4.6218743, y: 4.5718746, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.5375008, z: 0.53982145, w: 0.53982145} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.53749996, z: 0.53982145, w: 0.5398205} + distancesB: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + center: {x: 4.6218743, y: 4.890625, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.21875048, w: 0.21875048} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.09999991, w: -0.09999991} + center: {x: 4.9406247, y: 4.5718746, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.21875048, z: 0.22439204, w: 0.22439204} + distancesB: {x: -0.09999991, y: -0.09999991, z: -0.1118034, w: -0.1118034} + center: {x: 4.9406247, y: 4.890625, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.5375008, w: 0.21875048} + distancesB: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.1017818} + center: {x: 4.6218743, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.21875048, w: -0.09999991} + distancesB: {x: 0.10178145, y: -0.1641237, z: 0.1017818, w: -0.16412257} + center: {x: 4.6218743, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.5375008, y: 0.21875048, z: 0.53982145, w: 0.22439204} + distancesB: {x: 0.21875048, y: 0.1017818, z: 0.22439204, w: 0.1133995} + center: {x: 4.6218743, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: -0.09999991, z: 0.22439204, w: -0.1118034} + distancesB: {x: 0.1017818, y: -0.16412257, z: 0.1133995, w: -0.17156953} + center: {x: 4.6218743, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.10178145, z: 0.21875048, w: 0.1017818} + distancesB: {x: -0.09999991, y: -0.16412348, z: -0.09999991, w: -0.16412257} + center: {x: 4.9406247, y: 4.5718746, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.10178145, y: -0.1641237, z: 0.1017818, w: -0.16412257} + distancesB: {x: -0.16412348, y: -0.34850723, z: -0.16412257, w: -0.34850723} + center: {x: 4.9406247, y: 4.5718746, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.21875048, y: 0.1017818, z: 0.22439204, w: 0.1133995} + distancesB: {x: -0.09999991, y: -0.16412257, z: -0.1118034, w: -0.17156968} + center: {x: 4.9406247, y: 4.890625, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.1017818, y: -0.16412257, z: 0.1133995, w: -0.17156953} + distancesB: {x: -0.16412257, y: -0.34850723, z: -0.17156968, w: -0.3520757} + center: {x: 4.9406247, y: 4.890625, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: 0.159375, w: 0.159375} + firstChild: 10681 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: 0.47812498, w: 0.159375} + firstChild: 10689 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: 0.159375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: 0.47812498, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: 0.79687494, w: 0.159375} + firstChild: 10697 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: 1.1156249, w: 0.159375} + firstChild: 10705 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: 0.79687494, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: 1.1156249, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: 1.4343749, w: 0.159375} + firstChild: 10713 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: 1.7531248, w: 0.159375} + firstChild: 10721 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: 1.4343749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: 1.7531248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: 2.0718749, w: 0.159375} + firstChild: 10729 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: 2.3906248, w: 0.159375} + firstChild: 10737 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: 2.0718749, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: 2.3906248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: 2.709375, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: 2.709375, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10745 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: 2.709375, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: 2.709375, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: 3.0281248, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: 3.0281248, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10753 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: 3.0281248, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: 3.0281248, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: 3.3468747, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: 3.3468747, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10761 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: 3.3468747, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: 3.3468747, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: 3.6656246, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: 3.6656246, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10769 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: 3.6656246, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: 3.6656246, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: 2.709375, w: 0.159375} + firstChild: 10777 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: 3.0281248, w: 0.159375} + firstChild: 10785 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: 2.709375, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: 3.0281248, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: 3.3468747, w: 0.159375} + firstChild: 10793 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: 3.6656246, w: 0.159375} + firstChild: 10801 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: 3.3468747, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: 3.6656246, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + center: {x: 3.9843748, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: 3.9843748, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10809 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + center: {x: 3.9843748, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: 3.9843748, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.5398205, y: 0.22439204, z: 0.6518306, w: 0.42875254} + center: {x: 4.303125, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + center: {x: 4.303125, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10817 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.6518306, y: 0.42875254, z: 0.87267613, w: 0.72146326} + center: {x: 4.303125, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + center: {x: 4.303125, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.53982145, z: 0.6518314, w: 0.6518314} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.5398205, z: 0.6518314, w: 0.6518306} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + center: {x: 4.6218743, y: 5.2093754, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518314, z: 0.8726768, w: 0.8726768} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.6518314, y: 0.6518306, z: 0.8726768, w: 0.87267613} + distancesB: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + center: {x: 4.6218743, y: 5.528126, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: 3.9843748, w: 0.159375} + firstChild: 10825 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.42875254, w: 0.42875254} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.3820693, w: -0.3820693} + center: {x: 4.9406247, y: 5.2093754, z: 4.303125, w: 0.159375} + firstChild: 10833 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: 3.9843748, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.42875254, z: 0.72146326, w: 0.72146326} + distancesB: {x: -0.3820693, y: -0.3820693, z: -0.6947356, w: -0.6947356} + center: {x: 4.9406247, y: 5.528126, z: 4.303125, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.53982145, y: 0.22439204, z: 0.6518314, w: 0.42875254} + distancesB: {x: 0.22439204, y: 0.1133995, z: 0.42875254, w: 0.3825394} + center: {x: 4.6218743, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: -0.1118034, z: 0.42875254, w: -0.3820693} + distancesB: {x: 0.1133995, y: -0.17156953, z: 0.3825394, w: -0.40362453} + center: {x: 4.6218743, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: 10841 + - distancesA: {x: 0.6518314, y: 0.42875254, z: 0.8726768, w: 0.72146326} + distancesB: {x: 0.42875254, y: 0.3825394, z: 0.72146326, w: 0.6949943} + center: {x: 4.6218743, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: -0.3820693, z: 0.72146326, w: -0.6947356} + distancesB: {x: 0.3825394, y: -0.40362453, z: 0.6949943, w: -0.70681894} + center: {x: 4.6218743, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.1133995, z: 0.42875254, w: 0.3825394} + distancesB: {x: -0.1118034, y: -0.17156968, z: -0.3820693, w: -0.40362495} + center: {x: 4.9406247, y: 5.2093754, z: 4.6218743, w: 0.159375} + firstChild: 10849 + - distancesA: {x: 0.1133995, y: -0.17156953, z: 0.3825394, w: -0.40362453} + distancesB: {x: -0.17156968, y: -0.3520757, z: -0.40362495, w: -0.50737983} + center: {x: 4.9406247, y: 5.2093754, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.42875254, y: 0.3825394, z: 0.72146326, w: 0.6949943} + distancesB: {x: -0.3820693, y: -0.40362495, z: -0.6947356, w: -0.7068194} + center: {x: 4.9406247, y: 5.528126, z: 4.6218743, w: 0.159375} + firstChild: -1 + - distancesA: {x: 0.3825394, y: -0.40362453, z: 0.6949943, w: -0.70681894} + distancesB: {x: -0.40362495, y: -0.50737983, z: -0.7068194, w: -0.77078843} + center: {x: 4.9406247, y: 5.528126, z: 4.9406247, w: 0.159375} + firstChild: -1 + - distancesA: {x: -0.17156968, y: -0.122896254, z: -0.26603416, w: -0.23757423} + distancesB: {x: -0.05527544, y: 0.06439217, z: -0.21069743, w: 0.21327068} + center: {x: -5.0203123, y: 5.129688, z: -4.701562, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.122896254, y: -0.1118034, z: -0.23757423, w: -0.23203021} + distancesB: {x: 0.06439217, y: 0.07762373, z: 0.21327068, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -4.5421867, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.26603416, y: -0.23757423, z: -0.40362495, w: -0.38546133} + distancesB: {x: -0.21069743, y: 0.21327068, z: -0.36950284, w: 0.37097615} + center: {x: -5.0203123, y: 5.289063, z: -4.701562, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23757423, y: -0.23203021, z: -0.38546133, w: -0.3820693} + distancesB: {x: 0.21327068, y: 0.2176315, z: 0.37097615, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -4.5421867, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.05527544, y: 0.06439217, z: -0.21069743, w: 0.21327068} + distancesB: {x: 0.1133995, y: 0.19851884, z: 0.23280351, w: 0.2841615} + center: {x: -4.860937, y: 5.129688, z: -4.701562, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.06439217, y: 0.07762373, z: 0.21327068, w: 0.2176315} + distancesB: {x: 0.19851884, y: 0.22439204, z: 0.2841615, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -4.5421867, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.21069743, y: 0.21327068, z: -0.36950284, w: 0.37097615} + distancesB: {x: 0.23280351, y: 0.2841615, z: 0.3825394, w: 0.41579646} + center: {x: -4.860937, y: 5.289063, z: -4.701562, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.21327068, y: 0.2176315, z: 0.37097615, w: 0.3735002} + distancesB: {x: 0.2841615, y: 0.30280328, z: 0.41579646, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -4.5421867, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.17156953, y: -0.055275008, z: -0.2660338, w: -0.21069695} + distancesB: {x: -0.122896254, y: 0.06439217, z: -0.23757423, w: 0.21327068} + center: {x: -4.701562, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.055275008, y: 0.1133995, z: -0.21069695, w: 0.23280351} + distancesB: {x: 0.06439217, y: 0.19851884, z: 0.21327068, w: 0.2841615} + center: {x: -4.701562, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.2660338, y: -0.21069695, z: -0.40362453, w: -0.36950234} + distancesB: {x: -0.23757423, y: 0.21327068, z: -0.38546133, w: 0.37097615} + center: {x: -4.701562, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.21069695, y: 0.23280351, z: -0.36950234, w: 0.3825394} + distancesB: {x: 0.21327068, y: 0.2841615, z: 0.37097615, w: 0.41579646} + center: {x: -4.701562, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.122896254, y: 0.06439217, z: -0.23757423, w: 0.21327068} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -4.5421867, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.06439217, y: 0.19851884, z: 0.21327068, w: 0.2841615} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -4.5421867, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23757423, y: 0.21327068, z: -0.38546133, w: 0.37097615} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -4.5421867, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.21327068, y: 0.2841615, z: 0.37097615, w: 0.41579646} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -4.5421867, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -4.3828125, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -4.2234373, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -4.3828125, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -4.2234373, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -4.3828125, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -4.2234373, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -4.3828125, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -4.2234373, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -4.064062, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -3.9046872, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -4.064062, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -3.9046872, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -4.064062, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -3.9046872, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -4.064062, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -3.9046872, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -4.3828125, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -4.3828125, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -4.3828125, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -4.3828125, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -4.2234373, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -4.2234373, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -4.2234373, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -4.2234373, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -4.064062, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -4.064062, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -4.064062, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -4.064062, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -3.9046872, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -3.9046872, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -3.9046872, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -3.9046872, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -3.7453122, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -3.585937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -3.7453122, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -3.585937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -3.7453122, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -3.585937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -3.7453122, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -3.585937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -3.4265623, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -3.267187, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -3.4265623, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -3.267187, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -3.4265623, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -3.267187, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -3.4265623, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -3.267187, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -3.1078124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -2.9484372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -3.1078124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -2.9484372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -3.1078124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -2.9484372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -3.1078124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -2.9484372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -2.7890625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -2.6296873, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -2.7890625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -2.6296873, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -2.7890625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -2.6296873, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -2.7890625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -2.6296873, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -3.7453122, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -3.7453122, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -3.7453122, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -3.7453122, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -3.585937, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -3.585937, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -3.585937, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -3.585937, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -3.4265623, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -3.4265623, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -3.4265623, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -3.4265623, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -3.267187, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -3.267187, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -3.267187, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -3.267187, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -3.1078124, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -3.1078124, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -3.1078124, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -3.1078124, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -2.9484372, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -2.9484372, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -2.9484372, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -2.9484372, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -2.7890625, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -2.7890625, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -2.7890625, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -2.7890625, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -2.6296873, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -2.6296873, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -2.6296873, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -2.6296873, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -2.4703124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -2.3109372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -2.4703124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -2.3109372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -2.4703124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -2.3109372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -2.4703124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -2.3109372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -2.1515625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -1.9921874, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -2.1515625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -1.9921874, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -2.1515625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -1.9921874, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -2.1515625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -1.9921874, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -1.8328123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -1.6734374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -1.8328123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -1.6734374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -1.8328123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -1.6734374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -1.8328123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -1.6734374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -1.5140624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -1.3546875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -1.5140624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -1.3546875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -1.5140624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -1.3546875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -1.5140624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -1.3546875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -1.1953124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -1.0359374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -1.1953124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -1.0359374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -1.1953124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -1.0359374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -1.1953124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -1.0359374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -0.8765624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -0.71718746, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -0.8765624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -0.71718746, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -0.8765624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -0.71718746, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -0.8765624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -0.71718746, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -0.55781245, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -0.39843747, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -0.55781245, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -0.39843747, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -0.55781245, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -0.39843747, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -0.55781245, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -0.39843747, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -0.23906249, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: -0.0796875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -0.23906249, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: -0.0796875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -0.23906249, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: -0.0796875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -0.23906249, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: -0.0796875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -2.4703124, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -2.4703124, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -2.4703124, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -2.4703124, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -2.3109372, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -2.3109372, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -2.3109372, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -2.3109372, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -2.1515625, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -2.1515625, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -2.1515625, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -2.1515625, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -1.9921874, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -1.9921874, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -1.9921874, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -1.9921874, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -1.8328123, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -1.8328123, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -1.8328123, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -1.8328123, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -1.6734374, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -1.6734374, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -1.6734374, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -1.6734374, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -1.5140624, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -1.5140624, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -1.5140624, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -1.5140624, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -1.3546875, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -1.3546875, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -1.3546875, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -1.3546875, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -1.1953124, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -1.1953124, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -1.1953124, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -1.1953124, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -1.0359374, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -1.0359374, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -1.0359374, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -1.0359374, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -0.8765624, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -0.8765624, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -0.8765624, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -0.8765624, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -0.71718746, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -0.71718746, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -0.71718746, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -0.71718746, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -0.55781245, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -0.55781245, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -0.55781245, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -0.55781245, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -0.39843747, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -0.39843747, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -0.39843747, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -0.39843747, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -0.23906249, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -0.23906249, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -0.23906249, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -0.23906249, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: -0.0796875, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: -0.0796875, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: -0.0796875, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: -0.0796875, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 0.0796875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 0.23906249, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 0.0796875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 0.23906249, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 0.0796875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 0.23906249, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 0.0796875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 0.23906249, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 0.39843747, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 0.55781245, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 0.39843747, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 0.55781245, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 0.39843747, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 0.55781245, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 0.39843747, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 0.55781245, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 0.71718746, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 0.8765624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 0.71718746, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 0.8765624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 0.71718746, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 0.8765624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 0.71718746, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 0.8765624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 1.0359374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 1.1953124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 1.0359374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 1.1953124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 1.0359374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 1.1953124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 1.0359374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 1.1953124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 1.3546875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 1.5140624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 1.3546875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 1.5140624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 1.3546875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 1.5140624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 1.3546875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 1.5140624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 1.6734374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 1.8328123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 1.6734374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 1.8328123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 1.6734374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 1.8328123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 1.6734374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 1.8328123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 1.9921874, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 2.1515625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 1.9921874, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 2.1515625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 1.9921874, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 2.1515625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 1.9921874, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 2.1515625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 2.3109372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 2.4703124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 2.3109372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 2.4703124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 2.3109372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 2.4703124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 2.3109372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 2.4703124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 2.6296873, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 2.7890625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 2.6296873, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 2.7890625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 2.6296873, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 2.7890625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 2.6296873, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 2.7890625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 2.9484372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 3.1078124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 2.9484372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 3.1078124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 2.9484372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 3.1078124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 2.9484372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 3.1078124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 3.267187, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 3.4265623, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 3.267187, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 3.4265623, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 3.267187, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 3.4265623, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 3.267187, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 3.4265623, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 3.585937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 3.7453122, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 3.585937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 3.7453122, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 3.585937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 3.7453122, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 3.585937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 3.7453122, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 3.9046872, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 4.064062, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 3.9046872, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 4.064062, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 3.9046872, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 4.064062, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 3.9046872, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 4.064062, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 4.2234373, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: -5.0203123, y: 5.129688, z: 4.3828125, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 4.2234373, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: -5.0203123, y: 5.289063, z: 4.3828125, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 4.2234373, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + center: {x: -4.860937, y: 5.129688, z: 4.3828125, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 4.2234373, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + center: {x: -4.860937, y: 5.289063, z: 4.3828125, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: -0.122896254, z: -0.23203021, w: -0.23757423} + distancesB: {x: 0.07762373, y: 0.06439217, z: 0.2176315, w: 0.21327068} + center: {x: -5.0203123, y: 5.129688, z: 4.5421867, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.122896254, y: -0.17156953, z: -0.23757423, w: -0.2660338} + distancesB: {x: 0.06439217, y: -0.055275008, z: 0.21327068, w: -0.21069695} + center: {x: -5.0203123, y: 5.129688, z: 4.701562, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: -0.23757423, z: -0.3820693, w: -0.38546133} + distancesB: {x: 0.2176315, y: 0.21327068, z: 0.3735002, w: 0.37097615} + center: {x: -5.0203123, y: 5.289063, z: 4.5421867, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23757423, y: -0.2660338, z: -0.38546133, w: -0.40362453} + distancesB: {x: 0.21327068, y: -0.21069695, z: 0.37097615, w: -0.36950234} + center: {x: -5.0203123, y: 5.289063, z: 4.701562, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.06439217, z: 0.2176315, w: 0.21327068} + distancesB: {x: 0.22439204, y: 0.19851884, z: 0.30280328, w: 0.2841615} + center: {x: -4.860937, y: 5.129688, z: 4.5421867, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.06439217, y: -0.055275008, z: 0.21327068, w: -0.21069695} + distancesB: {x: 0.19851884, y: 0.1133995, z: 0.2841615, w: 0.23280351} + center: {x: -4.860937, y: 5.129688, z: 4.701562, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.21327068, z: 0.3735002, w: 0.37097615} + distancesB: {x: 0.30280328, y: 0.2841615, z: 0.42875254, w: 0.41579646} + center: {x: -4.860937, y: 5.289063, z: 4.5421867, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.21327068, y: -0.21069695, z: 0.37097615, w: -0.36950234} + distancesB: {x: 0.2841615, y: 0.23280351, z: 0.41579646, w: 0.3825394} + center: {x: -4.860937, y: 5.289063, z: 4.701562, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.1133995, y: -0.05527544, z: 0.23280351, w: -0.21069743} + distancesB: {x: 0.19851884, y: 0.06439217, z: 0.2841615, w: 0.21327068} + center: {x: -4.701562, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.05527544, y: -0.17156968, z: -0.21069743, w: -0.26603416} + distancesB: {x: 0.06439217, y: -0.122896254, z: 0.21327068, w: -0.23757423} + center: {x: -4.701562, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.23280351, y: -0.21069743, z: 0.3825394, w: -0.36950284} + distancesB: {x: 0.2841615, y: 0.21327068, z: 0.41579646, w: 0.37097615} + center: {x: -4.701562, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.21069743, y: -0.26603416, z: -0.36950284, w: -0.40362495} + distancesB: {x: 0.21327068, y: -0.23757423, z: 0.37097615, w: -0.38546133} + center: {x: -4.701562, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.19851884, y: 0.06439217, z: 0.2841615, w: 0.21327068} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -4.5421867, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.06439217, y: -0.122896254, z: 0.21327068, w: -0.23757423} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -4.5421867, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2841615, y: 0.21327068, z: 0.41579646, w: 0.37097615} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -4.5421867, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.21327068, y: -0.23757423, z: 0.37097615, w: -0.38546133} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -4.5421867, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -4.3828125, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -4.3828125, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -4.3828125, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -4.3828125, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -4.2234373, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -4.2234373, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -4.2234373, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -4.2234373, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -4.064062, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -4.064062, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -4.064062, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -4.064062, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -3.9046872, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -3.9046872, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -3.9046872, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -3.9046872, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -3.7453122, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -3.7453122, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -3.7453122, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -3.7453122, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -3.585937, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -3.585937, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -3.585937, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -3.585937, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -3.4265623, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -3.4265623, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -3.4265623, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -3.4265623, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -3.267187, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -3.267187, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -3.267187, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -3.267187, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -3.1078124, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -3.1078124, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -3.1078124, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -3.1078124, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -2.9484372, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -2.9484372, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -2.9484372, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -2.9484372, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -2.7890625, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -2.7890625, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -2.7890625, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -2.7890625, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -2.6296873, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -2.6296873, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -2.6296873, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -2.6296873, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -2.4703124, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -2.4703124, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -2.4703124, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -2.4703124, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -2.3109372, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -2.3109372, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -2.3109372, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -2.3109372, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -2.1515625, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -2.1515625, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -2.1515625, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -2.1515625, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -1.9921874, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -1.9921874, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -1.9921874, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -1.9921874, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -1.8328123, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -1.8328123, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -1.8328123, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -1.8328123, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -1.6734374, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -1.6734374, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -1.6734374, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -1.6734374, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -1.5140624, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -1.5140624, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -1.5140624, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -1.5140624, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -1.3546875, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -1.3546875, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -1.3546875, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -1.3546875, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -1.1953124, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -1.1953124, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -1.1953124, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -1.1953124, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -1.0359374, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -1.0359374, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -1.0359374, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -1.0359374, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -0.8765624, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -0.8765624, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -0.8765624, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -0.8765624, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -0.71718746, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -0.71718746, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -0.71718746, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -0.71718746, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -0.55781245, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -0.55781245, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -0.55781245, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -0.55781245, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -0.39843747, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -0.39843747, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -0.39843747, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -0.39843747, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -0.23906249, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -0.23906249, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -0.23906249, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -0.23906249, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: -0.0796875, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: -0.0796875, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: -0.0796875, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: -0.0796875, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 0.0796875, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 0.0796875, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 0.0796875, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 0.0796875, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 0.23906249, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 0.23906249, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 0.23906249, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 0.23906249, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 0.39843747, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 0.39843747, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 0.39843747, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 0.39843747, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 0.55781245, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 0.55781245, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 0.55781245, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 0.55781245, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 0.71718746, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 0.71718746, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 0.71718746, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 0.71718746, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 0.8765624, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 0.8765624, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 0.8765624, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 0.8765624, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 1.0359374, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 1.0359374, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 1.0359374, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 1.0359374, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 1.1953124, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 1.1953124, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 1.1953124, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 1.1953124, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 1.3546875, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 1.3546875, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 1.3546875, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 1.3546875, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 1.5140624, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 1.5140624, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 1.5140624, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 1.5140624, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 1.6734374, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 1.6734374, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 1.6734374, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 1.6734374, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 1.8328123, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 1.8328123, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 1.8328123, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 1.8328123, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 1.9921874, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 1.9921874, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 1.9921874, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 1.9921874, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 2.1515625, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 2.1515625, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 2.1515625, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 2.1515625, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 2.3109372, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 2.3109372, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 2.3109372, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 2.3109372, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 2.4703124, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 2.4703124, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 2.4703124, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 2.4703124, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 2.6296873, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 2.6296873, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 2.6296873, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 2.6296873, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 2.7890625, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 2.7890625, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 2.7890625, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 2.7890625, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 2.9484372, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 2.9484372, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 2.9484372, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 2.9484372, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 3.1078124, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 3.1078124, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 3.1078124, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 3.1078124, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 3.267187, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 3.267187, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 3.267187, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 3.267187, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 3.4265623, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 3.4265623, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 3.4265623, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 3.4265623, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 3.585937, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 3.585937, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 3.585937, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 3.585937, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 3.7453122, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 3.7453122, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 3.7453122, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 3.7453122, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 3.9046872, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 3.9046872, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 3.9046872, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 3.9046872, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 4.064062, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 4.064062, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 4.064062, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 4.064062, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 4.2234373, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 4.2234373, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 4.2234373, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 4.2234373, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + center: {x: 4.3828125, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + center: {x: 4.3828125, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + center: {x: 4.3828125, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + center: {x: 4.3828125, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.1118034, y: 0.07762373, z: -0.23203021, w: 0.2176315} + distancesB: {x: -0.122896254, y: 0.06439217, z: -0.23757423, w: 0.21327068} + center: {x: 4.5421867, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.22439204, z: 0.2176315, w: 0.30280328} + distancesB: {x: 0.06439217, y: 0.19851884, z: 0.21327068, w: 0.2841615} + center: {x: 4.5421867, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23203021, y: 0.2176315, z: -0.3820693, w: 0.3735002} + distancesB: {x: -0.23757423, y: 0.21327068, z: -0.38546133, w: 0.37097615} + center: {x: 4.5421867, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.30280328, z: 0.3735002, w: 0.42875254} + distancesB: {x: 0.21327068, y: 0.2841615, z: 0.37097615, w: 0.41579646} + center: {x: 4.5421867, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.122896254, y: 0.06439217, z: -0.23757423, w: 0.21327068} + distancesB: {x: -0.17156968, y: -0.05527544, z: -0.26603416, w: -0.21069743} + center: {x: 4.701562, y: 5.129688, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.06439217, y: 0.19851884, z: 0.21327068, w: 0.2841615} + distancesB: {x: -0.05527544, y: 0.1133995, z: -0.21069743, w: 0.23280351} + center: {x: 4.701562, y: 5.129688, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.23757423, y: 0.21327068, z: -0.38546133, w: 0.37097615} + distancesB: {x: -0.26603416, y: -0.21069743, z: -0.40362495, w: -0.36950284} + center: {x: 4.701562, y: 5.289063, z: -5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.21327068, y: 0.2841615, z: 0.37097615, w: 0.41579646} + distancesB: {x: -0.21069743, y: 0.23280351, z: -0.36950284, w: 0.3825394} + center: {x: 4.701562, y: 5.289063, z: -4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.1133995, y: 0.19851884, z: 0.23280351, w: 0.2841615} + distancesB: {x: -0.055275008, y: 0.06439217, z: -0.21069695, w: 0.21327068} + center: {x: 4.860937, y: 5.129688, z: -4.701562, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.19851884, y: 0.22439204, z: 0.2841615, w: 0.30280328} + distancesB: {x: 0.06439217, y: 0.07762373, z: 0.21327068, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -4.5421867, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.23280351, y: 0.2841615, z: 0.3825394, w: 0.41579646} + distancesB: {x: -0.21069695, y: 0.21327068, z: -0.36950234, w: 0.37097615} + center: {x: 4.860937, y: 5.289063, z: -4.701562, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2841615, y: 0.30280328, z: 0.41579646, w: 0.42875254} + distancesB: {x: 0.21327068, y: 0.2176315, z: 0.37097615, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -4.5421867, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.055275008, y: 0.06439217, z: -0.21069695, w: 0.21327068} + distancesB: {x: -0.17156953, y: -0.122896254, z: -0.2660338, w: -0.23757423} + center: {x: 5.0203123, y: 5.129688, z: -4.701562, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.06439217, y: 0.07762373, z: 0.21327068, w: 0.2176315} + distancesB: {x: -0.122896254, y: -0.1118034, z: -0.23757423, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -4.5421867, w: 0.0796875} + firstChild: -1 + - distancesA: {x: -0.21069695, y: 0.21327068, z: -0.36950234, w: 0.37097615} + distancesB: {x: -0.2660338, y: -0.23757423, z: -0.40362453, w: -0.38546133} + center: {x: 5.0203123, y: 5.289063, z: -4.701562, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.21327068, y: 0.2176315, z: 0.37097615, w: 0.3735002} + distancesB: {x: -0.23757423, y: -0.23203021, z: -0.38546133, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -4.5421867, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -4.3828125, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -4.2234373, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -4.3828125, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -4.2234373, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -4.3828125, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -4.2234373, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -4.3828125, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -4.2234373, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -4.064062, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -3.9046872, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -4.064062, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -3.9046872, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -4.064062, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -3.9046872, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -4.064062, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -3.9046872, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -3.7453122, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -3.585937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -3.7453122, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -3.585937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -3.7453122, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -3.585937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -3.7453122, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -3.585937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -3.4265623, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -3.267187, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -3.4265623, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -3.267187, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -3.4265623, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -3.267187, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -3.4265623, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -3.267187, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -3.1078124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -2.9484372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -3.1078124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -2.9484372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -3.1078124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -2.9484372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -3.1078124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -2.9484372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -2.7890625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -2.6296873, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -2.7890625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -2.6296873, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -2.7890625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -2.6296873, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -2.7890625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -2.6296873, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -2.4703124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -2.3109372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -2.4703124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -2.3109372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -2.4703124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -2.3109372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -2.4703124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -2.3109372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -2.1515625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -1.9921874, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -2.1515625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -1.9921874, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -2.1515625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -1.9921874, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -2.1515625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -1.9921874, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -1.8328123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -1.6734374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -1.8328123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -1.6734374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -1.8328123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -1.6734374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -1.8328123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -1.6734374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -1.5140624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -1.3546875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -1.5140624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -1.3546875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -1.5140624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -1.3546875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -1.5140624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -1.3546875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -1.1953124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -1.0359374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -1.1953124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -1.0359374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -1.1953124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -1.0359374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -1.1953124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -1.0359374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -0.8765624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -0.71718746, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -0.8765624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -0.71718746, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -0.8765624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -0.71718746, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -0.8765624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -0.71718746, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -0.55781245, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -0.39843747, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -0.55781245, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -0.39843747, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -0.55781245, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -0.39843747, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -0.55781245, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -0.39843747, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -0.23906249, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: -0.0796875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -0.23906249, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: -0.0796875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -0.23906249, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: -0.0796875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -0.23906249, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: -0.0796875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 0.0796875, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 0.0796875, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 0.0796875, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 0.0796875, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 0.23906249, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 0.23906249, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 0.23906249, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 0.23906249, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 0.39843747, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 0.39843747, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 0.39843747, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 0.39843747, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 0.55781245, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 0.55781245, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 0.55781245, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 0.55781245, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 0.71718746, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 0.71718746, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 0.71718746, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 0.71718746, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 0.8765624, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 0.8765624, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 0.8765624, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 0.8765624, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 1.0359374, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 1.0359374, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 1.0359374, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 1.0359374, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 1.1953124, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 1.1953124, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 1.1953124, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 1.1953124, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 1.3546875, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 1.3546875, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 1.3546875, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 1.3546875, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 1.5140624, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 1.5140624, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 1.5140624, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 1.5140624, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 1.6734374, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 1.6734374, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 1.6734374, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 1.6734374, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 1.8328123, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 1.8328123, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 1.8328123, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 1.8328123, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 1.9921874, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 1.9921874, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 1.9921874, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 1.9921874, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 2.1515625, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 2.1515625, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 2.1515625, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 2.1515625, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 2.3109372, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 2.3109372, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 2.3109372, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 2.3109372, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 2.4703124, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 2.4703124, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 2.4703124, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 2.4703124, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 0.0796875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 0.23906249, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 0.0796875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 0.23906249, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 0.0796875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 0.23906249, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 0.0796875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 0.23906249, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 0.39843747, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 0.55781245, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 0.39843747, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 0.55781245, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 0.39843747, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 0.55781245, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 0.39843747, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 0.55781245, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 0.71718746, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 0.8765624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 0.71718746, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 0.8765624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 0.71718746, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 0.8765624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 0.71718746, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 0.8765624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 1.0359374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 1.1953124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 1.0359374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 1.1953124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 1.0359374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 1.1953124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 1.0359374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 1.1953124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 1.3546875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 1.5140624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 1.3546875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 1.5140624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 1.3546875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 1.5140624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 1.3546875, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 1.5140624, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 1.6734374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 1.8328123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 1.6734374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 1.8328123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 1.6734374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 1.8328123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 1.6734374, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 1.8328123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 1.9921874, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 2.1515625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 1.9921874, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 2.1515625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 1.9921874, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 2.1515625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 1.9921874, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 2.1515625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 2.3109372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 2.4703124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 2.3109372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 2.4703124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 2.3109372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 2.4703124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 2.3109372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 2.4703124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 2.6296873, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 2.6296873, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 2.6296873, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 2.6296873, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 2.7890625, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 2.7890625, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 2.7890625, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 2.7890625, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 2.9484372, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 2.9484372, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 2.9484372, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 2.9484372, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 3.1078124, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 3.1078124, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 3.1078124, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 3.1078124, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 3.267187, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 3.267187, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 3.267187, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 3.267187, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 3.4265623, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 3.4265623, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 3.4265623, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 3.4265623, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 3.585937, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 3.585937, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 3.585937, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 3.585937, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 3.7453122, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 3.7453122, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 3.7453122, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 3.7453122, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 2.6296873, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 2.7890625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 2.6296873, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 2.7890625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 2.6296873, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 2.7890625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 2.6296873, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 2.7890625, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 2.9484372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 3.1078124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 2.9484372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 3.1078124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 2.9484372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 3.1078124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 2.9484372, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 3.1078124, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 3.267187, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 3.4265623, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 3.267187, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 3.4265623, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 3.267187, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 3.4265623, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 3.267187, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 3.4265623, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 3.585937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 3.7453122, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 3.585937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 3.7453122, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 3.585937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 3.7453122, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 3.585937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 3.7453122, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 3.9046872, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 3.9046872, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 3.9046872, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 3.9046872, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 4.064062, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 4.064062, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 4.064062, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 4.064062, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 4.2234373, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 4.2234373, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 4.2234373, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 4.2234373, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + center: {x: 4.3828125, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + center: {x: 4.3828125, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + center: {x: 4.3828125, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + center: {x: 4.3828125, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 3.9046872, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 4.064062, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 3.9046872, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 4.064062, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 3.9046872, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 4.064062, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 3.9046872, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 4.064062, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 4.2234373, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.22439204, z: 0.30280328, w: 0.30280328} + distancesB: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + center: {x: 4.860937, y: 5.129688, z: 4.3828125, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 4.2234373, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.30280328, z: 0.42875254, w: 0.42875254} + distancesB: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + center: {x: 4.860937, y: 5.289063, z: 4.3828125, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 4.2234373, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.07762373, z: 0.2176315, w: 0.2176315} + distancesB: {x: -0.1118034, y: -0.1118034, z: -0.23203021, w: -0.23203021} + center: {x: 5.0203123, y: 5.129688, z: 4.3828125, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 4.2234373, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.2176315, z: 0.3735002, w: 0.3735002} + distancesB: {x: -0.23203021, y: -0.23203021, z: -0.3820693, w: -0.3820693} + center: {x: 5.0203123, y: 5.289063, z: 4.3828125, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.07762373, z: 0.30280328, w: 0.2176315} + distancesB: {x: 0.19851884, y: 0.06439217, z: 0.2841615, w: 0.21327068} + center: {x: 4.5421867, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: -0.1118034, z: 0.2176315, w: -0.23203021} + distancesB: {x: 0.06439217, y: -0.122896254, z: 0.21327068, w: -0.23757423} + center: {x: 4.5421867, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2176315, z: 0.42875254, w: 0.3735002} + distancesB: {x: 0.2841615, y: 0.21327068, z: 0.41579646, w: 0.37097615} + center: {x: 4.5421867, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: -0.23203021, z: 0.3735002, w: -0.3820693} + distancesB: {x: 0.21327068, y: -0.23757423, z: 0.37097615, w: -0.38546133} + center: {x: 4.5421867, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.19851884, y: 0.06439217, z: 0.2841615, w: 0.21327068} + distancesB: {x: 0.1133995, y: -0.055275008, z: 0.23280351, w: -0.21069695} + center: {x: 4.701562, y: 5.129688, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.06439217, y: -0.122896254, z: 0.21327068, w: -0.23757423} + distancesB: {x: -0.055275008, y: -0.17156953, z: -0.21069695, w: -0.2660338} + center: {x: 4.701562, y: 5.129688, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2841615, y: 0.21327068, z: 0.41579646, w: 0.37097615} + distancesB: {x: 0.23280351, y: -0.21069695, z: 0.3825394, w: -0.36950234} + center: {x: 4.701562, y: 5.289063, z: 4.860937, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.21327068, y: -0.23757423, z: 0.37097615, w: -0.38546133} + distancesB: {x: -0.21069695, y: -0.2660338, z: -0.36950234, w: -0.40362453} + center: {x: 4.701562, y: 5.289063, z: 5.0203123, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.22439204, y: 0.19851884, z: 0.30280328, w: 0.2841615} + distancesB: {x: 0.07762373, y: 0.06439217, z: 0.2176315, w: 0.21327068} + center: {x: 4.860937, y: 5.129688, z: 4.5421867, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.19851884, y: 0.1133995, z: 0.2841615, w: 0.23280351} + distancesB: {x: 0.06439217, y: -0.05527544, z: 0.21327068, w: -0.21069743} + center: {x: 4.860937, y: 5.129688, z: 4.701562, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.30280328, y: 0.2841615, z: 0.42875254, w: 0.41579646} + distancesB: {x: 0.2176315, y: 0.21327068, z: 0.3735002, w: 0.37097615} + center: {x: 4.860937, y: 5.289063, z: 4.5421867, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2841615, y: 0.23280351, z: 0.41579646, w: 0.3825394} + distancesB: {x: 0.21327068, y: -0.21069743, z: 0.37097615, w: -0.36950284} + center: {x: 4.860937, y: 5.289063, z: 4.701562, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.07762373, y: 0.06439217, z: 0.2176315, w: 0.21327068} + distancesB: {x: -0.1118034, y: -0.122896254, z: -0.23203021, w: -0.23757423} + center: {x: 5.0203123, y: 5.129688, z: 4.5421867, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.06439217, y: -0.05527544, z: 0.21327068, w: -0.21069743} + distancesB: {x: -0.122896254, y: -0.17156968, z: -0.23757423, w: -0.26603416} + center: {x: 5.0203123, y: 5.129688, z: 4.701562, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.2176315, y: 0.21327068, z: 0.3735002, w: 0.37097615} + distancesB: {x: -0.23203021, y: -0.23757423, z: -0.3820693, w: -0.38546133} + center: {x: 5.0203123, y: 5.289063, z: 4.5421867, w: 0.0796875} + firstChild: -1 + - distancesA: {x: 0.21327068, y: -0.21069743, z: 0.37097615, w: -0.36950284} + distancesB: {x: -0.23757423, y: -0.26603416, z: -0.38546133, w: -0.40362495} + center: {x: 5.0203123, y: 5.289063, z: 4.701562, w: 0.0796875} + firstChild: -1 + maxError: 0.02 + maxDepth: 7 diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/DistanceFields/EnvironmentDF.asset.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/DistanceFields/EnvironmentDF.asset.meta new file mode 100644 index 00000000..983d96e2 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/DistanceFields/EnvironmentDF.asset.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5eb5ff1af3a3f4a14977448198c232ae +timeCreated: 1507047323 +licenseType: Store +NativeFormatImporter: + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials.meta new file mode 100644 index 00000000..f9973a1c --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e71b9a406d7f848ceaaf698a595823f5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Checker.mat b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Checker.mat new file mode 100644 index 00000000..38e73e81 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Checker.mat @@ -0,0 +1,130 @@ +%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 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Checker + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: + - _EMISSION + m_InvalidKeywords: [] + m_LightmapFlags: 1 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: 8fbd9c5f957b8434883cdfce9d6a3c27, type: 3} + m_Scale: {x: 5, y: 5} + m_Offset: {x: 0, y: 0} + - _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: 5, y: 5} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 8fbd9c5f957b8434883cdfce9d6a3c27, type: 3} + m_Scale: {x: 5, y: 5} + 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} + - _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: + - _AlphaClip: 0 + - _Blend: 0 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EmissionScaleUI: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.3 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 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: 0} + - _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1} + - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Checker.mat.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Checker.mat.meta new file mode 100644 index 00000000..be9b10c5 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Checker.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 359ef2e4b09204eeab112e419c308068 +timeCreated: 1435572264 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/CoarseChecker.mat b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/CoarseChecker.mat new file mode 100644 index 00000000..225a670b --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/CoarseChecker.mat @@ -0,0 +1,134 @@ +%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: CoarseChecker + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 6 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: 8fbd9c5f957b8434883cdfce9d6a3c27, type: 3} + m_Scale: {x: 5, y: 5} + m_Offset: {x: 0, y: 0} + - _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: 5, y: 5} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 8fbd9c5f957b8434883cdfce9d6a3c27, type: 3} + m_Scale: {x: 5, y: 5} + 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} + - _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: + - _AlphaClip: 0 + - _Blend: 0 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EmissionScaleUI: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.3 + - _GlossinessSource: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _SampleGI: 0 + - _Shininess: 0 + - _Smoothness: 0.3 + - _SmoothnessSource: 0 + - _SmoothnessTextureChannel: 0 + - _SpecSource: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 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: 0} + - _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1} + - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_BuildTextureStacks: [] +--- !u!114 &5136862684972130647 +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 diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/CoarseChecker.mat.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/CoarseChecker.mat.meta new file mode 100644 index 00000000..ffff85c2 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/CoarseChecker.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e78e1b735e05b4dee88b279cb6997001 +timeCreated: 1435572264 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/FinishLine.mat b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/FinishLine.mat new file mode 100644 index 00000000..865db02e --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/FinishLine.mat @@ -0,0 +1,82 @@ +%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: FinishLine + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: + - _ALPHAPREMULTIPLY_ON + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + stringTagMap: + RenderType: Transparent + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 5, y: 5} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 8fbd9c5f957b8434883cdfce9d6a3c27, type: 3} + m_Scale: {x: 5, y: 5} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 10 + - _GlossMapScale: 1 + - _Glossiness: 0.2 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 3 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 0 + m_Colors: + - _Color: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0.9843137, g: 0.21960784, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/FinishLine.mat.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/FinishLine.mat.meta new file mode 100644 index 00000000..4034ef32 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/FinishLine.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d3b93997453834b97a4e8f3df52e1068 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Flesh.mat b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Flesh.mat new file mode 100644 index 00000000..b3a46880 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Flesh.mat @@ -0,0 +1,80 @@ +%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: Flesh + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 2 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.25 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 0.72530067, b: 0.61960787, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Flesh.mat.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Flesh.mat.meta new file mode 100644 index 00000000..1f653d94 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Flesh.mat.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5c0346dbcbacd4648bec909deff79751 +labels: +- ObiRope +- ObiSoftbody +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Metal.mat b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Metal.mat new file mode 100644 index 00000000..0e13998a --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Metal.mat @@ -0,0 +1,83 @@ +%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: Metal + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: + - _EMISSION + m_InvalidKeywords: [] + m_LightmapFlags: 1 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EmissionScaleUI: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.6 + - _GlossyReflections: 1 + - _Metallic: 1 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.4705882, g: 0.4705882, b: 0.4705882, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Metal.mat.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Metal.mat.meta new file mode 100644 index 00000000..f70fa93a --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Metal.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 278487642d12d4bf78416679d50d6fd7 +timeCreated: 1466469210 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/TestEnvironment.mat b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/TestEnvironment.mat new file mode 100644 index 00000000..f11a35f1 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/TestEnvironment.mat @@ -0,0 +1,114 @@ +%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: TestEnvironment + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: + - _EMISSION + - _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + m_InvalidKeywords: [] + m_LightmapFlags: 1 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: 8fbd9c5f957b8434883cdfce9d6a3c27, type: 3} + m_Scale: {x: 11, y: 11} + m_Offset: {x: 0, y: 0} + - _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: 11, y: 11} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 8fbd9c5f957b8434883cdfce9d6a3c27, type: 3} + m_Scale: {x: 11, y: 11} + 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} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AlphaClip: 0 + - _Blend: 0 + - _BumpScale: 1 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0.5 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 1 + - _SpecularHighlights: 1 + - _SrcBlend: 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.2, g: 0.2, b: 0.2, a: 1} + m_BuildTextureStacks: [] +--- !u!114 &2635063883510072054 +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: 2 diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/TestEnvironment.mat.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/TestEnvironment.mat.meta new file mode 100644 index 00000000..9a0de1c1 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/TestEnvironment.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a0a5f9e13fa7c47f78547e54896609da +timeCreated: 1483094905 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/VertexColors.mat b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/VertexColors.mat new file mode 100644 index 00000000..e0dcc70a --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/VertexColors.mat @@ -0,0 +1,84 @@ +%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: VertexColors + m_Shader: {fileID: 4800000, guid: 96c602bba0bc94471862812f91285c9a, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: + - _EMISSION + - _METALLICGLOSSMAP + m_LightmapFlags: 1 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 176574918b29445148929eb9a46c70ef, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 9, y: 5} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: a60971e26baf9443db442cd7e2ba5b5e, type: 3} + m_Scale: {x: 9, y: 5} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 83fe5f7b163cd49d085e4275cbf28473, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EmissionScaleUI: 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: 0} + - _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/VertexColors.mat.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/VertexColors.mat.meta new file mode 100644 index 00000000..ac38677a --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/VertexColors.mat.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f342c944c10cc4c9188a4f352c6a6eee +labels: +- ObiCloth +- ObiRope +- ObiSoftbody +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: -1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Walls.mat b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Walls.mat new file mode 100644 index 00000000..2aaeffa7 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Walls.mat @@ -0,0 +1,83 @@ +%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: Walls + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: + - _EMISSION + m_InvalidKeywords: [] + m_LightmapFlags: 1 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 9, y: 5} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 9, y: 5} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EmissionScaleUI: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.3 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.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} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Walls.mat.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Walls.mat.meta new file mode 100644 index 00000000..5a66eb87 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Materials/Walls.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 22451ea3bd268401796b02a7b7573725 +timeCreated: 1440011158 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Models.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Models.meta new file mode 100644 index 00000000..4d494cf0 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Models.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 11970e9494e804ccfac6c6fb46ab223c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Models/CubicSphere.fbx b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Models/CubicSphere.fbx new file mode 100644 index 00000000..63cb26c5 Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Models/CubicSphere.fbx differ diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Models/CubicSphere.fbx.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Models/CubicSphere.fbx.meta new file mode 100644 index 00000000..459e02ea --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Models/CubicSphere.fbx.meta @@ -0,0 +1,80 @@ +fileFormatVersion: 2 +guid: 2aa4d1401124f4f56bec911ef61b4766 +timeCreated: 1483097200 +licenseType: Store +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2300000: //RootNode + 3300000: //RootNode + 4300000: pCube1 + materials: + importMaterials: 0 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 50 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Models/Fan.fbx b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Models/Fan.fbx new file mode 100644 index 00000000..77ab5dd5 Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Models/Fan.fbx differ diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Models/Fan.fbx.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Models/Fan.fbx.meta new file mode 100644 index 00000000..cd9a62c9 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Samples/Common/SampleResources/Models/TestEnvironment.fbx b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Models/TestEnvironment.fbx new file mode 100644 index 00000000..7cbb2312 Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Models/TestEnvironment.fbx differ diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Models/TestEnvironment.fbx.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Models/TestEnvironment.fbx.meta new file mode 100644 index 00000000..68499bae --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Models/TestEnvironment.fbx.meta @@ -0,0 +1,120 @@ +fileFormatVersion: 2 +guid: 64df75de10b494f109b074d28a8eade0 +ModelImporter: + serializedVersion: 21202 + internalIDToNameTable: + - first: + 1: 100000 + second: //RootNode + - first: + 4: 400000 + second: //RootNode + - first: + 23: 2300000 + second: //RootNode + - first: + 33: 3300000 + second: //RootNode + - first: + 43: 4300000 + second: pCube1 + 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: 500 + 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: 500 + 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/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts.meta new file mode 100644 index 00000000..0961a1f0 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2851bb019d40d478b971f640aac2a9ba +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorCOMTransform.cs b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorCOMTransform.cs new file mode 100644 index 00000000..05148223 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorCOMTransform.cs @@ -0,0 +1,21 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Obi; + +public class ActorCOMTransform : MonoBehaviour +{ + + public Vector3 offset; + public ObiActor actor; + + public void Update() + { + if (actor != null && actor.isLoaded) + { + Vector3 com; + actor.GetMass(out com); + transform.position = actor.solver.transform.TransformPoint(com) + offset; + } + } +} diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorCOMTransform.cs.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorCOMTransform.cs.meta new file mode 100644 index 00000000..8d256b6f --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorCOMTransform.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eaf186b4497d04a31853e3c6570848c7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorSpawner.cs b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorSpawner.cs new file mode 100644 index 00000000..3589c736 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorSpawner.cs @@ -0,0 +1,29 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Obi; + +public class ActorSpawner : MonoBehaviour { + + public ObiActor template; + + public int maxInstances = 32; + public float spawnDelay = 0.3f; + + private int instances = 0; + private float timeFromLastSpawn = 0; + + // Update is called once per frame + void Update () { + + timeFromLastSpawn += Time.deltaTime; + + 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; + } + } +} diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorSpawner.cs.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorSpawner.cs.meta new file mode 100644 index 00000000..e8de32b0 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorSpawner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 628acd4e2e0fc4c8eafc9a96563762a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/AddRandomVelocity.cs b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/AddRandomVelocity.cs new file mode 100644 index 00000000..b2551b99 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/AddRandomVelocity.cs @@ -0,0 +1,16 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Obi; + +[RequireComponent(typeof(ObiActor))] +public class AddRandomVelocity : MonoBehaviour { + + public float intensity = 5; + + void Update () { + if (Input.GetKeyDown(KeyCode.Space)){ + GetComponent().AddForce(UnityEngine.Random.onUnitSphere*intensity,ForceMode.VelocityChange); + } + } +} diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/AddRandomVelocity.cs.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/AddRandomVelocity.cs.meta new file mode 100644 index 00000000..fb900153 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/AddRandomVelocity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 16f6da785ba3d49c1aff763a6f55e424 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/Blinker.cs b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/Blinker.cs new file mode 100644 index 00000000..89737408 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/Blinker.cs @@ -0,0 +1,23 @@ +using UnityEngine; + +public class Blinker : MonoBehaviour { + + public Color highlightColor; + + private Renderer rend; + private Color original; + + void Awake(){ + rend = GetComponent(); + original = rend.material.color; + } + + public void Blink(){ + rend.material.color = highlightColor; + } + + void LateUpdate(){ + rend.material.color += (original - rend.material.color)*Time.deltaTime*5; + } + +} diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/Blinker.cs.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/Blinker.cs.meta new file mode 100644 index 00000000..db54e62f --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/Blinker.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b63f5717a039e488ab8ccfb80eda50e6 +timeCreated: 1494351303 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController.meta new file mode 100644 index 00000000..428e0c8f --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4a1b43750986e462db0a210922ad76b1 +folderAsset: yes +timeCreated: 1518001485 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/ObiCharacter.cs b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/ObiCharacter.cs new file mode 100644 index 00000000..45b5f92b --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/ObiCharacter.cs @@ -0,0 +1,229 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Obi{ + + [RequireComponent(typeof(Rigidbody))] + [RequireComponent(typeof(CapsuleCollider))] + [RequireComponent(typeof(Animator))] + public class ObiCharacter : MonoBehaviour { + + [SerializeField] float m_MovingTurnSpeed = 360; + [SerializeField] float m_StationaryTurnSpeed = 180; + [SerializeField] float m_JumpPower = 12f; + [Range(1f, 4f)][SerializeField] float m_GravityMultiplier = 2f; + [SerializeField] float m_RunCycleLegOffset = 0.2f; //specific to the character in sample assets, will need to be modified to work with others + [SerializeField] float m_MoveSpeedMultiplier = 1f; + [SerializeField] float m_AnimSpeedMultiplier = 1f; + [SerializeField] float m_GroundCheckDistance = 0.1f; + + Rigidbody m_Rigidbody; + Animator m_Animator; + bool m_IsGrounded; + float m_OrigGroundCheckDistance; + const float k_Half = 0.5f; + float m_TurnAmount; + float m_ForwardAmount; + Vector3 m_GroundNormal; + float m_CapsuleHeight; + Vector3 m_CapsuleCenter; + CapsuleCollider m_Capsule; + bool m_Crouching; + + void Start() + { + Physics.IgnoreLayerCollision(LayerMask.NameToLayer("Default"),LayerMask.NameToLayer("Ignore Raycast"),true); + + m_Animator = GetComponent(); + m_Rigidbody = GetComponent(); + m_Capsule = GetComponent(); + m_CapsuleHeight = m_Capsule.height; + m_CapsuleCenter = m_Capsule.center; + + m_Rigidbody.constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationY | RigidbodyConstraints.FreezeRotationZ; + m_OrigGroundCheckDistance = m_GroundCheckDistance; + } + + + public void Move(Vector3 move, bool crouch, bool jump) + { + + // convert the world relative moveInput vector into a local-relative + // turn amount and forward amount required to head in the desired + // direction. + if (move.magnitude > 1f) move.Normalize(); + move = transform.InverseTransformDirection(move); + CheckGroundStatus(); + move = Vector3.ProjectOnPlane(move, m_GroundNormal); + m_TurnAmount = Mathf.Atan2(move.x, move.z); + m_ForwardAmount = move.z; + + ApplyExtraTurnRotation(); + + // control and velocity handling is different when grounded and airborne: + if (m_IsGrounded) + { + HandleGroundedMovement(crouch, jump); + } + else + { + HandleAirborneMovement(); + } + + ScaleCapsuleForCrouching(crouch); + PreventStandingInLowHeadroom(); + + // send input and other state parameters to the animator + UpdateAnimator(move); + } + + + void ScaleCapsuleForCrouching(bool crouch) + { + if (m_IsGrounded && crouch) + { + if (m_Crouching) return; + m_Capsule.height = m_Capsule.height / 2f; + m_Capsule.center = m_Capsule.center / 2f; + m_Crouching = true; + } + else + { + Ray crouchRay = new Ray(m_Rigidbody.position + Vector3.up * m_Capsule.radius * k_Half, Vector3.up); + float crouchRayLength = m_CapsuleHeight - m_Capsule.radius * k_Half; + if (Physics.SphereCast(crouchRay, m_Capsule.radius * k_Half, crouchRayLength, ~Physics.IgnoreRaycastLayer, QueryTriggerInteraction.Ignore)) + { + m_Crouching = true; + return; + } + m_Capsule.height = m_CapsuleHeight; + m_Capsule.center = m_CapsuleCenter; + m_Crouching = false; + } + } + + void PreventStandingInLowHeadroom() + { + // prevent standing up in crouch-only zones + if (!m_Crouching) + { + Ray crouchRay = new Ray(m_Rigidbody.position + Vector3.up * m_Capsule.radius * k_Half, Vector3.up); + float crouchRayLength = m_CapsuleHeight - m_Capsule.radius * k_Half; + if (Physics.SphereCast(crouchRay, m_Capsule.radius * k_Half, crouchRayLength, ~Physics.IgnoreRaycastLayer, QueryTriggerInteraction.Ignore)) + { + m_Crouching = true; + } + } + } + + + void UpdateAnimator(Vector3 move) + { + // update the animator parameters + m_Animator.SetFloat("Forward", m_ForwardAmount, 0.1f, Time.deltaTime); + m_Animator.SetFloat("Turn", m_TurnAmount, 0.1f, Time.deltaTime); + m_Animator.SetBool("Crouch", m_Crouching); + m_Animator.SetBool("OnGround", m_IsGrounded); + if (!m_IsGrounded) + { + m_Animator.SetFloat("Jump", m_Rigidbody.velocity.y); + } + + // calculate which leg is behind, so as to leave that leg trailing in the jump animation + // (This code is reliant on the specific run cycle offset in our animations, + // and assumes one leg passes the other at the normalized clip times of 0.0 and 0.5) + float runCycle = + Mathf.Repeat( + m_Animator.GetCurrentAnimatorStateInfo(0).normalizedTime + m_RunCycleLegOffset, 1); + float jumpLeg = (runCycle < k_Half ? 1 : -1) * m_ForwardAmount; + if (m_IsGrounded) + { + m_Animator.SetFloat("JumpLeg", jumpLeg); + } + + // the anim speed multiplier allows the overall speed of walking/running to be tweaked in the inspector, + // which affects the movement speed because of the root motion. + if (m_IsGrounded && move.magnitude > 0) + { + m_Animator.speed = m_AnimSpeedMultiplier; + } + else + { + // don't use that while airborne + m_Animator.speed = 1; + } + } + + + void HandleAirborneMovement() + { + // apply extra gravity from multiplier: + Vector3 extraGravityForce = (Physics.gravity * m_GravityMultiplier) - Physics.gravity; + m_Rigidbody.AddForce(extraGravityForce); + + m_GroundCheckDistance = m_Rigidbody.velocity.y < 0 ? m_OrigGroundCheckDistance : 0.01f; + } + + + void HandleGroundedMovement(bool crouch, bool jump) + { + // check whether conditions are right to allow a jump: + if (jump && !crouch && m_Animator.GetCurrentAnimatorStateInfo(0).IsName("Grounded")) + { + // jump! + m_Rigidbody.velocity = new Vector3(m_Rigidbody.velocity.x, m_JumpPower, m_Rigidbody.velocity.z); + m_IsGrounded = false; + m_Animator.applyRootMotion = false; + m_GroundCheckDistance = 0.1f; + } + } + + void ApplyExtraTurnRotation() + { + // help the character turn faster (this is in addition to root rotation in the animation) + float turnSpeed = Mathf.Lerp(m_StationaryTurnSpeed, m_MovingTurnSpeed, m_ForwardAmount); + transform.Rotate(0, m_TurnAmount * turnSpeed * Time.deltaTime, 0); + } + + + public void OnAnimatorMove() + { + // we implement this function to override the default root motion. + // this allows us to modify the positional speed before it's applied. + if (m_IsGrounded) + { + Vector3 v = (m_Animator.deltaPosition * m_MoveSpeedMultiplier) / Time.deltaTime; + + // we preserve the existing y part of the current velocity. + v.y = m_Rigidbody.velocity.y; + m_Rigidbody.velocity = v; + } + } + + + void CheckGroundStatus() + { + RaycastHit hitInfo; +#if UNITY_EDITOR + // helper to visualise the ground check ray in the scene view + Debug.DrawLine(transform.position + (Vector3.up * 0.1f), transform.position + (Vector3.up * 0.1f) + (Vector3.down * m_GroundCheckDistance)); +#endif + // 0.1f is a small offset to start the ray from inside the character + // it is also good to note that the transform position in the sample assets is at the base of the character + if (Physics.Raycast(transform.position + (Vector3.up * 0.1f), Vector3.down, out hitInfo, m_GroundCheckDistance,~Physics.IgnoreRaycastLayer)) + { + m_GroundNormal = hitInfo.normal; + m_IsGrounded = true; + m_Animator.applyRootMotion = true; + } + else + { + m_IsGrounded = false; + m_GroundNormal = Vector3.up; + m_Animator.applyRootMotion = false; + } + } + } + +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/ObiCharacter.cs.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/ObiCharacter.cs.meta new file mode 100644 index 00000000..43091bd6 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/ObiCharacter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 30974edc9036841cebffee1d18425185 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/SampleCharacterController.cs b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/SampleCharacterController.cs new file mode 100644 index 00000000..93c6fb00 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/SampleCharacterController.cs @@ -0,0 +1,72 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + + +namespace Obi{ + + [RequireComponent(typeof (ObiCharacter))] + public class SampleCharacterController : MonoBehaviour { + + private ObiCharacter m_Character; // A reference to the ThirdPersonCharacter on the object + private Transform m_Cam; // A reference to the main camera in the scenes transform + private Vector3 m_CamForward; // The current forward direction of the camera + private Vector3 m_Move; + private bool m_Jump; // the world-relative desired move direction, calculated from the camForward and user input. + + private void Start() + { + // get the transform of the main camera + if (Camera.main != null) + { + m_Cam = Camera.main.transform; + } + else + { + Debug.LogWarning( + "Warning: no main camera found. Third person character needs a Camera tagged \"MainCamera\", for camera-relative controls."); + // we use self-relative controls in this case, which probably isn't what the user wants, but hey, we warned them! + } + + // get the third person character ( this should never be null due to require component ) + m_Character = GetComponent(); + } + + + private void Update() + { + if (!m_Jump) + { + m_Jump = Input.GetButtonDown("Jump"); + } + + // read inputs + float h = Input.GetAxis("Horizontal"); + float v = Input.GetAxis("Vertical"); + bool crouch = Input.GetKey(KeyCode.C); + + // calculate move direction to pass to character + if (m_Cam != null) + { + // calculate camera relative direction to move: + m_CamForward = Vector3.Scale(m_Cam.forward, new Vector3(1, 0, 1)).normalized; + m_Move = v*m_CamForward + h*m_Cam.right; + } + else + { + // we use world-relative directions in the case of no main camera + m_Move = v*Vector3.forward + h*Vector3.right; + } + #if !MOBILE_INPUT + // walk speed multiplier + if (Input.GetKey(KeyCode.LeftShift)) m_Move *= 0.5f; + #endif + + // pass all parameters to the character control script + m_Character.Move(m_Move, crouch, m_Jump); + m_Jump = false; + } + + } + +} diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/SampleCharacterController.cs.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/SampleCharacterController.cs.meta new file mode 100644 index 00000000..b0aa0d0a --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/SampleCharacterController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de9bce9a2c43c424d81e85ea229e0004 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColliderHighlighter.cs b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColliderHighlighter.cs new file mode 100644 index 00000000..dcde1900 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColliderHighlighter.cs @@ -0,0 +1,45 @@ +using UnityEngine; +using Obi; + +[RequireComponent(typeof(ObiSolver))] +public class ColliderHighlighter : MonoBehaviour { + + ObiSolver solver; + + void Awake(){ + solver = GetComponent(); + } + + void OnEnable () { + solver.OnCollision += Solver_OnCollision; + } + + void OnDisable(){ + solver.OnCollision -= Solver_OnCollision; + } + + void Solver_OnCollision (object sender, ObiNativeContactList e) + { + var colliderWorld = ObiColliderWorld.GetInstance(); + + 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) + { + // 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/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColliderHighlighter.cs.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColliderHighlighter.cs.meta new file mode 100644 index 00000000..e0551d0d --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColliderHighlighter.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ef31b6ca9a4124cb893de1adabbfab18 +timeCreated: 1458771359 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/CollisionEventHandler.cs b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/CollisionEventHandler.cs new file mode 100644 index 00000000..5f9172d5 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/CollisionEventHandler.cs @@ -0,0 +1,184 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using Obi; + +[RequireComponent(typeof(ObiSolver))] +public class CollisionEventHandler : MonoBehaviour +{ + + ObiSolver solver; + public int contactCount; + + ObiNativeContactList frame; + + void Awake() + { + solver = GetComponent(); + } + + void OnEnable() + { + solver.OnCollision += Solver_OnCollision; + } + + void OnDisable() + { + solver.OnCollision -= Solver_OnCollision; + } + + void Solver_OnCollision(object sender, ObiNativeContactList e) + { + frame = e; + } + + void OnDrawGizmos() + { + if (solver == null || frame == null) return; + + Gizmos.matrix = solver.transform.localToWorldMatrix; + + contactCount = frame.count; + + for (int i = 0; i < frame.count; ++i) + { + 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); + + } + + /*for (int i = 0; i < frame.count; ++i) + { + 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 = 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/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/CollisionEventHandler.cs.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/CollisionEventHandler.cs.meta new file mode 100644 index 00000000..79eedd8e --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/CollisionEventHandler.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f6efd222d18e14e0b99e22b7fa35448c +timeCreated: 1458771359 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromPhase.cs b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromPhase.cs new file mode 100644 index 00000000..375904b0 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromPhase.cs @@ -0,0 +1,38 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + /** + * Sample script that colors fluid particles based on their vorticity (2D only) + */ + [RequireComponent(typeof(ObiActor))] + public class ColorFromPhase : MonoBehaviour + { + ObiActor actor; + + void Awake(){ + actor = GetComponent(); + } + + void LateUpdate() + { + if (!isActiveAndEnabled || actor.solver == null) + return; + + for (int i = 0; i < actor.solverIndices.count; ++i) + { + + int k = actor.solverIndices[i]; + int phase = ObiUtils.GetGroupFromPhase(actor.solver.phases[k]); + + actor.solver.colors[k] = ObiUtils.colorAlphabet[phase % ObiUtils.colorAlphabet.Length]; + + } + } + + } +} + diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromPhase.cs.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromPhase.cs.meta new file mode 100644 index 00000000..3c3a07fe --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromPhase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3252a39e388cf4229a933f0158ece73b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromVelocity.cs b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromVelocity.cs new file mode 100644 index 00000000..54ac64cd --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromVelocity.cs @@ -0,0 +1,43 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + /** + * Sample script that colors fluid particles based on their vorticity (2D only) + */ + [RequireComponent(typeof(ObiActor))] + public class ColorFromVelocity : MonoBehaviour + { + ObiActor actor; + public float sensibility = 0.2f; + + void Awake(){ + actor = GetComponent(); + } + + public void OnEnable(){} + + void LateUpdate() + { + if (!isActiveAndEnabled || actor.solver == null) + return; + + for (int i = 0; i < actor.solverIndices.count; ++i){ + + int k = actor.solverIndices[i]; + + Vector4 vel = actor.solver.velocities[k]; + + actor.solver.colors[k] = new Color(Mathf.Clamp(vel.x / sensibility,-1,1) * 0.5f + 0.5f, + Mathf.Clamp(vel.y / sensibility,-1,1) * 0.5f + 0.5f, + Mathf.Clamp(vel.z / sensibility,-1,1) * 0.5f + 0.5f,1); + + } + } + + } +} + diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromVelocity.cs.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromVelocity.cs.meta new file mode 100644 index 00000000..ecfa5185 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromVelocity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5acdea6dc69cb46f3ad3d92757580843 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorRandomizer.cs b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorRandomizer.cs new file mode 100644 index 00000000..b130ca5c --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorRandomizer.cs @@ -0,0 +1,26 @@ +using UnityEngine; + +namespace Obi +{ + [RequireComponent(typeof(ObiActor))] + public class ColorRandomizer : MonoBehaviour + { + ObiActor actor; + public Gradient gradient = new Gradient(); + + void Start() + { + actor = GetComponent(); + actor.OnBlueprintLoaded += Actor_OnBlueprintLoaded; + } + + 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/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorRandomizer.cs.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorRandomizer.cs.meta new file mode 100644 index 00000000..5b858de4 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorRandomizer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e479c6a54eba4250a39b1f9a46c3b14 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/DebugParticleFrames.cs b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/DebugParticleFrames.cs new file mode 100644 index 00000000..25e1f211 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/DebugParticleFrames.cs @@ -0,0 +1,39 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Obi; + +[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) + { + + 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/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/DebugParticleFrames.cs.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/DebugParticleFrames.cs.meta new file mode 100644 index 00000000..59a21d00 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/DebugParticleFrames.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bab528011ba08418f99627d25a289fd3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ExtrapolationCamera.cs b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ExtrapolationCamera.cs new file mode 100644 index 00000000..4f7a1346 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ExtrapolationCamera.cs @@ -0,0 +1,76 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Obi; + +public class ExtrapolationCamera : MonoBehaviour +{ + 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() + { + if (target != null) + lastPosition = target.position; + } + + private void FixedUpdate() + { + if (target != null) + { + // 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; + } + } + + void LateUpdate() + { + if (target != null) + { + // get vector from the camera to the extrapolated position: + Vector3 toTarget = extrapolatedPos - transform.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/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ExtrapolationCamera.cs.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ExtrapolationCamera.cs.meta new file mode 100644 index 00000000..20257ab0 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ExtrapolationCamera.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7118f3a432315464297cab517f322eca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/FPSDisplay.cs b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/FPSDisplay.cs new file mode 100644 index 00000000..2433ea77 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/FPSDisplay.cs @@ -0,0 +1,77 @@ +using UnityEngine; +using UnityEngine.UI; +using System.Collections; + +[RequireComponent(typeof(Text))] +public class FPSDisplay : MonoBehaviour +{ + 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 + { + 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; + ++frames; + + // Interval ended - update GUI text and start new interval + if( timeleft <= 0.0) + { + currentFPS = accum / frames; + + average += (Mathf.Abs(currentFPS) - average) * 0.1f; + median += Mathf.Sign(currentFPS - median) * Mathf.Min(average * medianLearnrate, Mathf.Abs(currentFPS - median)); + + // 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); + + timeleft = updateInterval; + accum = 0.0F; + frames = 0; + } + //#endif + } + + public void ResetMedianAndAverage() + { + median = 0; + average = 0; + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/FPSDisplay.cs.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/FPSDisplay.cs.meta new file mode 100644 index 00000000..3255db50 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/FPSDisplay.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f14f49b61044e49ebb2f29511f2b3f41 +timeCreated: 1518870953 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/LookAroundCamera.cs b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/LookAroundCamera.cs new file mode 100644 index 00000000..fa8ba5cb --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/LookAroundCamera.cs @@ -0,0 +1,81 @@ +using UnityEngine; + +namespace Obi +{ + [RequireComponent(typeof(Camera))] + public class LookAroundCamera : MonoBehaviour + { + public struct CameraShot + { + public Vector3 position; + public Quaternion rotation; + public Vector3 up; + public float fieldOfView; + + public CameraShot(Vector3 position, Quaternion rotation, Vector3 up, float fieldOfView) + { + this.position = position; + this.rotation = rotation; + this.up = up; + this.fieldOfView = fieldOfView; + } + } + + private Camera cam; + private CameraShot currentShot; + + public float movementSpeed = 5; + public float rotationSpeed = 8; + public float translationResponse = 10; + public float rotationResponse = 10; + public float fovResponse = 10; + + private void Awake() + { + cam = GetComponent(); + currentShot = new CameraShot(transform.position, transform.rotation, transform.up, cam.fieldOfView); + } + + private void LookAt(Vector3 position, Vector3 up) + { + currentShot.up = up; + currentShot.rotation = Quaternion.LookRotation(position - currentShot.position, currentShot.up); + } + + private void UpdateShot() + { + transform.position = Vector3.Lerp(transform.position, currentShot.position, translationResponse * Time.deltaTime); + transform.rotation = Quaternion.Slerp(transform.rotation, currentShot.rotation, rotationResponse * Time.deltaTime); + cam.fieldOfView = Mathf.Lerp(cam.fieldOfView, currentShot.fieldOfView, fovResponse * Time.deltaTime); + } + + private void LateUpdate() + { + Vector3 delta = Vector3.zero; + + if (Input.GetKey(KeyCode.W)) + delta += cam.transform.forward; + if (Input.GetKey(KeyCode.A)) + delta -= cam.transform.right; + if (Input.GetKey(KeyCode.S)) + delta -= cam.transform.forward; + if (Input.GetKey(KeyCode.D)) + delta += cam.transform.right; + + currentShot.position += delta * Time.deltaTime * movementSpeed; + + 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; + Quaternion fwd = currentShot.rotation * Quaternion.AngleAxis(deltaX, Vector3.up) * Quaternion.AngleAxis(deltaY, -Vector3.right); + LookAt(currentShot.position + fwd * Vector3.forward, Vector3.up); + } + + UpdateShot(); + } + } +} diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/LookAroundCamera.cs.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/LookAroundCamera.cs.meta new file mode 100644 index 00000000..189500fe --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/LookAroundCamera.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 138d2e060d2cd42f58c60b22bca0159e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/MoveAndRotate.cs b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/MoveAndRotate.cs new file mode 100644 index 00000000..7597a980 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/MoveAndRotate.cs @@ -0,0 +1,39 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public class MoveAndRotate : MonoBehaviour + { + public Vector3andSpace moveUnitsPerSecond; + public Vector3andSpace rotateDegreesPerSecond; + public bool ignoreTimescale; + private float m_LastRealTime; + + private void Start() + { + m_LastRealTime = Time.realtimeSinceStartup; + } + + // Update is called once per frame + private void FixedUpdate() + { + float deltaTime = Time.fixedDeltaTime; + if (ignoreTimescale) + { + deltaTime = (Time.realtimeSinceStartup - m_LastRealTime); + m_LastRealTime = Time.realtimeSinceStartup; + } + transform.Translate(moveUnitsPerSecond.value*deltaTime, moveUnitsPerSecond.space); + transform.Rotate(rotateDegreesPerSecond.value*deltaTime, rotateDegreesPerSecond.space); + } + + + [Serializable] + public class Vector3andSpace + { + public Vector3 value; + public Space space = Space.Self; + } + } +} diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/MoveAndRotate.cs.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/MoveAndRotate.cs.meta new file mode 100644 index 00000000..80e9d582 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/MoveAndRotate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dae436d3aef704ae1b22a06a92480162 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiActorTeleport.cs b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiActorTeleport.cs new file mode 100644 index 00000000..d9b6f8d6 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiActorTeleport.cs @@ -0,0 +1,15 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Obi; + +public class ObiActorTeleport : MonoBehaviour +{ + public ObiActor actor; + public Transform target; + + public void Teleport() + { + actor.Teleport(target.position, target.rotation); + } +} diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiActorTeleport.cs.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiActorTeleport.cs.meta new file mode 100644 index 00000000..69ee1306 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiActorTeleport.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ef23dec4d0c424492a85ebca02b625bc +timeCreated: 1491379841 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiParticleCounter.cs b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiParticleCounter.cs new file mode 100644 index 00000000..76c8bb14 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiParticleCounter.cs @@ -0,0 +1,53 @@ +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; + + ObiNativeContactList 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, 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); + } + +} + diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiParticleCounter.cs.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiParticleCounter.cs.meta new file mode 100644 index 00000000..399ee1a6 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiParticleCounter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b4d7608433fa641c6ad7e1ad3716e0b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectDragger.cs b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectDragger.cs new file mode 100644 index 00000000..1ca0319c --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectDragger.cs @@ -0,0 +1,23 @@ +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; + } + + + } \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectDragger.cs.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectDragger.cs.meta new file mode 100644 index 00000000..37e2551c --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectDragger.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cbe5860a158ab4ff9852d93167f38e5a +timeCreated: 1490723525 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectLimit.cs b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectLimit.cs new file mode 100644 index 00000000..9bea6154 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectLimit.cs @@ -0,0 +1,22 @@ +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 diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectLimit.cs.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectLimit.cs.meta new file mode 100644 index 00000000..05e6e67b --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectLimit.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6da1d294c86704f3394415f542741ebe +timeCreated: 1490723525 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/SlowmoToggler.cs b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/SlowmoToggler.cs new file mode 100644 index 00000000..2e907216 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/SlowmoToggler.cs @@ -0,0 +1,10 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class SlowmoToggler : MonoBehaviour { + + public void Slowmo (bool slowmo) { + Time.timeScale = slowmo?0.25f:1; + } +} diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/SlowmoToggler.cs.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/SlowmoToggler.cs.meta new file mode 100644 index 00000000..b29b2a87 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/SlowmoToggler.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5ec309595a8ca48b3a4deae53d6b023d +timeCreated: 1496678069 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/WorldSpaceGravity.cs b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/WorldSpaceGravity.cs new file mode 100644 index 00000000..c91f8816 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/WorldSpaceGravity.cs @@ -0,0 +1,21 @@ +using UnityEngine; +using Obi; + +[RequireComponent(typeof(ObiSolver))] +public class WorldSpaceGravity : MonoBehaviour +{ + + 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/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/WorldSpaceGravity.cs.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/WorldSpaceGravity.cs.meta new file mode 100644 index 00000000..cb0ae7f9 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Scripts/WorldSpaceGravity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 278a56537b77b462a894513bc9d3e474 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/SparksEmitter.prefab b/xiaofang/Assets/Obi/Samples/Common/SampleResources/SparksEmitter.prefab new file mode 100644 index 00000000..9ddbf0cf --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/SparksEmitter.prefab @@ -0,0 +1,4965 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1583403103468830 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4722265400142248} + - component: {fileID: 198836399661015336} + - component: {fileID: 199384163534097954} + m_Layer: 0 + m_Name: SparksEmitter + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4722265400142248 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583403103468830} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583403103468830} + serializedVersion: 8 + lengthInSec: 5 + simulationSpeed: 2 + stopAction: 0 + cullingMode: 3 + ringBufferMode: 0 + ringBufferLoopRange: {x: 0, y: 1} + emitterVelocityMode: 1 + looping: 1 + prewarm: 0 + playOnAwake: 1 + useUnscaledTime: 0 + autoRandomSeed: 1 + startDelay: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + moveWithTransform: 1 + moveWithCustomTransform: {fileID: 0} + scalingMode: 1 + randomSeed: 0 + InitialModule: + serializedVersion: 3 + enabled: 1 + startLifetime: + serializedVersion: 2 + minMaxState: 3 + scalar: 3 + minScalar: 1 + maxCurve: + 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: 0 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.33333334 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + startSpeed: + serializedVersion: 2 + minMaxState: 3 + scalar: 2 + minScalar: 0.5 + maxCurve: + 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: 0 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.25 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + startColor: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + startSize: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.05 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotation: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + randomizeRotationDirection: 0 + maxNumParticles: 400 + customEmitterVelocity: {x: 0, y: 0, z: 0} + size3D: 0 + rotation3D: 0 + gravityModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.5 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ShapeModule: + serializedVersion: 6 + enabled: 1 + type: 4 + angle: 10 + length: 5 + boxThickness: {x: 0, y: 0, z: 0} + radiusThickness: 1 + donutRadius: 0.2 + m_Position: {x: 0, y: 0, z: 0} + m_Rotation: {x: 0, y: 0, z: 0} + m_Scale: {x: 1, y: 1, z: 1} + placementMode: 0 + m_MeshMaterialIndex: 0 + m_MeshNormalOffset: 0 + m_MeshSpawn: + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Mesh: {fileID: 0} + m_MeshRenderer: {fileID: 0} + m_SkinnedMeshRenderer: {fileID: 0} + m_Sprite: {fileID: 0} + m_SpriteRenderer: {fileID: 0} + m_UseMeshMaterialIndex: 0 + m_UseMeshColors: 1 + alignToDirection: 0 + m_Texture: {fileID: 0} + m_TextureClipChannel: 3 + m_TextureClipThreshold: 0 + m_TextureUVChannel: 0 + m_TextureColorAffectsParticles: 1 + m_TextureAlphaAffectsParticles: 1 + m_TextureBilinearFiltering: 0 + randomDirectionAmount: 0 + sphericalDirectionAmount: 0 + randomPositionAmount: 0 + radius: + value: 0.03 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + arc: + value: 360 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + EmissionModule: + enabled: 1 + serializedVersion: 4 + rateOverTime: + serializedVersion: 2 + minMaxState: 0 + scalar: 20 + minScalar: 10 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rateOverDistance: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BurstCount: 3 + m_Bursts: + - serializedVersion: 2 + time: 0 + countCurve: + serializedVersion: 2 + minMaxState: 3 + scalar: 10 + minScalar: 3 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + cycleCount: 1 + repeatInterval: 0.01 + probability: 1 + - serializedVersion: 2 + time: 1 + countCurve: + serializedVersion: 2 + minMaxState: 3 + scalar: 15 + minScalar: 6 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + cycleCount: 1 + repeatInterval: 0.01 + probability: 1 + - serializedVersion: 2 + time: 1.3 + countCurve: + serializedVersion: 2 + minMaxState: 3 + scalar: 20 + minScalar: 2 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + cycleCount: 1 + repeatInterval: 0.01 + probability: 1 + SizeModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + RotationModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + ColorModule: + enabled: 1 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 0, a: 1} + key1: {r: 1, g: 0.47058824, b: 0, a: 0} + key2: {r: 1, g: 0, b: 0.03137255, a: 0} + key3: {r: 0.23529412, g: 0.23529412, b: 0.23529412, 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: 17733 + ctime2: 56861 + ctime3: 24865 + ctime4: 39321 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 16384 + atime1: 65535 + atime2: 65535 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 3 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + UVModule: + serializedVersion: 2 + enabled: 0 + mode: 0 + timeMode: 0 + fps: 30 + frameOverTime: + serializedVersion: 2 + minMaxState: 1 + scalar: 0.9999 + minScalar: 0.9999 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startFrame: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedRange: {x: 0, y: 1} + tilesX: 1 + tilesY: 1 + animationType: 0 + rowIndex: 0 + cycles: 1 + uvChannelMask: -1 + rowMode: 1 + sprites: + - sprite: {fileID: 0} + flipU: 0 + flipV: 0 + VelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + radial: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + InheritVelocityModule: + enabled: 0 + m_Mode: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LifetimeByEmitterSpeedModule: + enabled: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: -0.8 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0.2 + inSlope: -0.8 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Range: {x: 0, y: 1} + ForceModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + randomizePerFrame: 0 + ExternalForcesModule: + serializedVersion: 2 + enabled: 0 + multiplierCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + influenceFilter: 0 + influenceMask: + serializedVersion: 2 + m_Bits: 4294967295 + influenceList: [] + ClampVelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + magnitude: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxis: 0 + inWorldSpace: 0 + multiplyDragByParticleSize: 1 + multiplyDragByParticleVelocity: 1 + dampen: 1 + drag: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + NoiseModule: + enabled: 0 + strength: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + frequency: 0.5 + damping: 1 + octaves: 1 + octaveMultiplier: 0.5 + octaveScale: 2 + quality: 2 + scrollSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remap: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapY: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapZ: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapEnabled: 0 + positionAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rotationAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + sizeAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + SizeBySpeedModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + range: {x: 0, y: 1} + separateAxes: 0 + RotationBySpeedModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + range: {x: 0, y: 1} + ColorBySpeedModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + range: {x: 0, y: 1} + CollisionModule: + enabled: 1 + serializedVersion: 4 + type: 1 + collisionMode: 0 + colliderForce: 0 + multiplyColliderForceByParticleSize: 0 + multiplyColliderForceByParticleSpeed: 0 + multiplyColliderForceByCollisionAngle: 1 + m_Planes: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + m_Dampen: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Bounce: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.3 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_EnergyLossOnCollision: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.02 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minKillSpeed: 0 + maxKillSpeed: 100 + radiusScale: 1 + collidesWith: + serializedVersion: 2 + m_Bits: 4294967295 + maxCollisionShapes: 256 + quality: 0 + voxelSize: 0.5 + collisionMessages: 0 + collidesWithDynamic: 1 + interiorCollisions: 1 + TriggerModule: + enabled: 0 + serializedVersion: 2 + inside: 1 + outside: 0 + enter: 0 + exit: 0 + colliderQueryMode: 0 + radiusScale: 1 + primitives: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + SubModule: + serializedVersion: 2 + enabled: 0 + subEmitters: + - serializedVersion: 3 + emitter: {fileID: 0} + type: 0 + properties: 0 + emitProbability: 1 + LightsModule: + enabled: 0 + ratio: 0 + light: {fileID: 0} + randomDistribution: 1 + color: 1 + range: 1 + intensity: 1 + rangeCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + intensityCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + maxLights: 20 + TrailModule: + enabled: 0 + mode: 0 + ratio: 1 + lifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minVertexDistance: 0.2 + textureMode: 0 + ribbonCount: 1 + shadowBias: 0.5 + worldSpace: 0 + dieWithParticles: 1 + sizeAffectsWidth: 1 + sizeAffectsLifetime: 0 + inheritParticleColor: 1 + generateLightingData: 0 + splitSubEmitterRibbons: 0 + attachRibbonsToTransform: 0 + colorOverLifetime: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + widthOverTrail: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorOverTrail: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + CustomDataModule: + enabled: 0 + mode0: 0 + vectorComponentCount0: 4 + color0: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel0: Color + vector0_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_0: X + vector0_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_1: Y + vector0_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_2: Z + vector0_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_3: W + mode1: 0 + vectorComponentCount1: 4 + color1: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel1: Color + vector1_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_0: X + vector1_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_1: Y + vector1_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_2: Z + vector1_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_3: W +--- !u!199 &199384163534097954 +ParticleSystemRenderer: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583403103468830} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10301, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 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 + m_CameraVelocityScale: 0 + m_VelocityScale: 0.02 + m_LengthScale: 2 + m_SortingFudge: 0 + m_NormalDirection: 1 + m_ShadowBias: 0 + 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_VertexStreams: 0001030405 + 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/xiaofang/Assets/Obi/Samples/Common/SampleResources/SparksEmitter.prefab.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/SparksEmitter.prefab.meta new file mode 100644 index 00000000..bf6777e0 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/SparksEmitter.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 46b3b311bc85645d88ddbc56ad5465f2 +labels: +- ObiRope +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Textures.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Textures.meta new file mode 100644 index 00000000..a9d4be5b --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 58f248a554f634b9b8e2b604bffc0611 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern.png b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern.png new file mode 100644 index 00000000..5277d46a Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern.png differ diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern.png.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern.png.meta new file mode 100644 index 00000000..bc957810 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: a60971e26baf9443db442cd7e2ba5b5e +timeCreated: 1435572248 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: 0 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern_SM.psd b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern_SM.psd new file mode 100644 index 00000000..c5541c63 Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern_SM.psd differ diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern_SM.psd.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern_SM.psd.meta new file mode 100644 index 00000000..0d23fff7 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern_SM.psd.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 83fe5f7b163cd49d085e4275cbf28473 +timeCreated: 1435574798 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Textures/checker.psd b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Textures/checker.psd new file mode 100644 index 00000000..9c88470d Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Textures/checker.psd differ diff --git a/xiaofang/Assets/Obi/Samples/Common/SampleResources/Textures/checker.psd.meta b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Textures/checker.psd.meta new file mode 100644 index 00000000..432b8a6a --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/Common/SampleResources/Textures/checker.psd.meta @@ -0,0 +1,100 @@ +fileFormatVersion: 2 +guid: 8fbd9c5f957b8434883cdfce9d6a3c27 +timeCreated: 1483095694 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - 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 + - buildTarget: WebGL + 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/xiaofang/Assets/Obi/Samples/RopeAndRod.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod.meta new file mode 100644 index 00000000..9b1be62b --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d590e90abb60549c5982d874c4264501 +labels: +- ObiRope +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/Chains.unity b/xiaofang/Assets/Obi/Samples/RopeAndRod/Chains.unity new file mode 100644 index 00000000..800fe3e9 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/Chains.unity @@ -0,0 +1,2389 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + 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: 21c4fb2401b72496aa6ac0cb399992d5, type: 2} +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &28960618 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 28960622} + - component: {fileID: 28960621} + - component: {fileID: 28960620} + - component: {fileID: 28960619} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &28960619 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 28960618} + 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 &28960620 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 28960618} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 1 + 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 &28960621 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 28960618} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 1002464895} + 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_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &28960622 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 28960618} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015565137, y: 0.015565143, z: 0.015565143} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1989779175} + m_Father: {fileID: 1804369595} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 1} + m_SizeDelta: {x: 250, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &34917040 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 34917041} + - component: {fileID: 34917045} + - component: {fileID: 34917044} + - component: {fileID: 34917043} + - component: {fileID: 34917042} + - component: {fileID: 34917047} + - component: {fileID: 34917046} + m_Layer: 0 + m_Name: Target1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &34917041 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 34917040} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.68, z: -0.75} + m_LocalScale: {x: 0.36332673, y: 1.194755, z: 0.36332673} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 870807627} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &34917042 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 34917040} + serializedVersion: 2 + m_Mass: 0.5 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!23 &34917043 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 34917040} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &34917044 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 34917040} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &34917045 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 34917040} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &34917046 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 34917040} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!114 &34917047 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 34917040} + 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: 34917044} + m_DistanceField: {fileID: 0} +--- !u!1 &37255347 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 37255348} + - component: {fileID: 37255352} + - component: {fileID: 37255351} + - component: {fileID: 37255350} + - component: {fileID: 37255349} + - component: {fileID: 37255354} + - component: {fileID: 37255353} + m_Layer: 0 + m_Name: Target2 (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &37255348 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 37255347} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.81, y: 0.68, z: 0.75} + m_LocalScale: {x: 0.36332998, y: 1.19476, z: 0.36332998} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 870807627} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &37255349 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 37255347} + serializedVersion: 2 + m_Mass: 0.5 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!23 &37255350 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 37255347} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &37255351 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 37255347} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &37255352 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 37255347} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &37255353 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 37255347} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!114 &37255354 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 37255347} + 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: 37255351} + m_DistanceField: {fileID: 0} +--- !u!1 &56383757 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 56383761} + - component: {fileID: 56383760} + - component: {fileID: 56383759} + - component: {fileID: 56383758} + - component: {fileID: 56383762} + - component: {fileID: 56383764} + - component: {fileID: 56383763} + m_Layer: 0 + m_Name: ChainBall + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &56383758 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 56383757} + 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: 278487642d12d4bf78416679d50d6fd7, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!135 &56383759 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 56383757} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &56383760 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 56383757} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &56383761 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 56383757} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.926, y: 2.74, z: 0.06} + 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!54 &56383762 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 56383757} + serializedVersion: 2 + m_Mass: 5 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 2 +--- !u!114 &56383763 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 56383757} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!114 &56383764 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 56383757} + 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: 56383759} + m_DistanceField: {fileID: 0} +--- !u!1001 &421764872 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + 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_SourcePrefab: {fileID: 100100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} +--- !u!1 &447687745 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 447687746} + - component: {fileID: 447687750} + - component: {fileID: 447687749} + - component: {fileID: 447687748} + - component: {fileID: 447687747} + - component: {fileID: 447687752} + - component: {fileID: 447687751} + m_Layer: 0 + m_Name: Target2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &447687746 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 447687745} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.68, z: 0.75} + m_LocalScale: {x: 0.36332673, y: 1.194755, z: 0.36332673} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 870807627} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &447687747 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 447687745} + serializedVersion: 2 + m_Mass: 0.5 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!23 &447687748 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 447687745} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &447687749 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 447687745} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &447687750 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 447687745} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &447687751 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 447687745} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!114 &447687752 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 447687745} + 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: 447687749} + m_DistanceField: {fileID: 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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + 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 &512808546 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 512808547} + - component: {fileID: 512808551} + - component: {fileID: 512808550} + - component: {fileID: 512808549} + - component: {fileID: 512808548} + - component: {fileID: 512808553} + - component: {fileID: 512808552} + m_Layer: 0 + m_Name: Target (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &512808547 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 512808546} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.81, y: 0.68, z: 0} + m_LocalScale: {x: 0.36332998, y: 1.19476, z: 0.36332998} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 870807627} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &512808548 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 512808546} + serializedVersion: 2 + m_Mass: 0.5 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!23 &512808549 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 512808546} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &512808550 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 512808546} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &512808551 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 512808546} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &512808552 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 512808546} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!114 &512808553 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 512808546} + 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: 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} + 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 &870807626 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 870807627} + m_Layer: 0 + m_Name: Targets + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &870807627 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 870807626} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1.89} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1225692703} + - {fileID: 34917041} + - {fileID: 447687746} + - {fileID: 37255348} + - {fileID: 1535267385} + - {fileID: 512808547} + m_Father: {fileID: 0} + m_RootOrder: 7 + 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_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 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} + 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!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: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.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_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1175446146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + 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 &1225692698 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1225692703} + - component: {fileID: 1225692702} + - component: {fileID: 1225692701} + - component: {fileID: 1225692700} + - component: {fileID: 1225692699} + - component: {fileID: 1225692705} + - component: {fileID: 1225692704} + m_Layer: 0 + m_Name: Target + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!54 &1225692699 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1225692698} + serializedVersion: 2 + m_Mass: 0.5 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!23 &1225692700 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1225692698} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1225692701 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1225692698} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1225692702 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1225692698} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1225692703 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1225692698} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.68, z: 0} + m_LocalScale: {x: 0.36332673, y: 1.194755, z: 0.36332673} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 870807627} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1225692704 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1225692698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!114 &1225692705 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1225692698} + 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: 1225692701} + m_DistanceField: {fileID: 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: 1346965647} + - component: {fileID: 1346965644} + - component: {fileID: 1346965643} + - component: {fileID: 1346965648} + - component: {fileID: 1346965645} + - component: {fileID: 1346965646} + m_Layer: 10 + m_Name: Obi Chain + 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: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b000000 + m_AlignBytes: 16 + groupID: 1 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_SelfCollisions: 0 + restLength_: 5.092446 + elements: + - particle1: 0 + particle2: 1 + restLength: 0.20054139 + constraintForce: 0 + tearResistance: 1 + - particle1: 1 + particle2: 2 + restLength: 0.20063484 + constraintForce: 0 + tearResistance: 1 + - particle1: 2 + particle2: 3 + restLength: 0.23151232 + constraintForce: 0 + tearResistance: 1 + - particle1: 3 + particle2: 4 + restLength: 0.23186833 + constraintForce: 0 + tearResistance: 1 + - particle1: 4 + particle2: 5 + restLength: 0.23228103 + constraintForce: 0 + tearResistance: 1 + - particle1: 5 + particle2: 6 + restLength: 0.23191649 + constraintForce: 0 + tearResistance: 1 + - particle1: 6 + particle2: 7 + restLength: 0.23182793 + constraintForce: 0 + tearResistance: 1 + - particle1: 7 + particle2: 8 + restLength: 0.23240596 + constraintForce: 0 + tearResistance: 1 + - particle1: 8 + particle2: 9 + restLength: 0.21189757 + constraintForce: 0 + tearResistance: 1 + - particle1: 9 + particle2: 10 + restLength: 0.22655237 + constraintForce: 0 + tearResistance: 1 + - particle1: 10 + particle2: 11 + restLength: 0.23074576 + constraintForce: 0 + tearResistance: 1 + - particle1: 11 + particle2: 12 + restLength: 0.23471601 + constraintForce: 0 + tearResistance: 1 + - particle1: 12 + particle2: 13 + restLength: 0.2193626 + constraintForce: 0 + tearResistance: 1 + - particle1: 13 + particle2: 14 + restLength: 0.22230886 + constraintForce: 0 + tearResistance: 1 + - particle1: 14 + particle2: 15 + restLength: 0.21369718 + constraintForce: 0 + tearResistance: 1 + - particle1: 15 + particle2: 16 + restLength: 0.20833145 + constraintForce: 0 + tearResistance: 1 + - particle1: 16 + particle2: 17 + restLength: 0.21743543 + constraintForce: 0 + tearResistance: 1 + - particle1: 17 + particle2: 18 + restLength: 0.21923774 + constraintForce: 0 + tearResistance: 1 + - particle1: 18 + particle2: 19 + restLength: 0.21907198 + constraintForce: 0 + tearResistance: 1 + - particle1: 19 + particle2: 20 + restLength: 0.21933578 + constraintForce: 0 + tearResistance: 1 + - particle1: 20 + particle2: 21 + restLength: 0.21983477 + constraintForce: 0 + tearResistance: 1 + - particle1: 21 + particle2: 22 + restLength: 0.22001559 + constraintForce: 0 + tearResistance: 1 + - particle1: 22 + particle2: 23 + 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 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.05 + _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: 09ac962c0743c400aa230ebf871b6156, type: 3} + m_Name: + m_EditorClassIdentifier: + linkMesh: {fileID: 4300000, guid: 70b5250dc71ea4b35987751a9843d8d6, type: 3} + linkMaterial: {fileID: 2100000, guid: edc856900ac3941a98996e21e91e215e, type: 2} + linkScale: {x: 34, y: 34, z: 34} + twistAnchor: 0 + 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 + 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: 09ac962c0743c400aa230ebf871b6156, type: 3} + m_Name: + m_EditorClassIdentifier: + linkMesh: {fileID: 4300000, guid: 70b5250dc71ea4b35987751a9843d8d6, type: 3} + linkMaterial: {fileID: 2100000, guid: b74081a5a5bbf418ea9f95bfec18f393, type: 2} + linkScale: {x: 34, y: 34, z: 34} + twistAnchor: 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 + 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: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1346965642} + m_Target: {fileID: 56383761} + m_ParticleGroup: {fileID: 7546284794258584817, guid: 9b7a30b754796421d9e0b869d8eb345b, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !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: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1346965642} + m_Target: {fileID: 1804369595} + m_ParticleGroup: {fileID: -4517029930201779066, guid: 9b7a30b754796421d9e0b869d8eb345b, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1346965647 +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: 0 +--- !u!114 &1346965648 +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: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1346965642} + m_Target: {fileID: 56383761} + m_ParticleGroup: {fileID: -53998285165153434, guid: 9b7a30b754796421d9e0b869d8eb345b, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!4 &1346965650 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1346965641} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.072, y: 3.14, z: 1.78} + 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!1 &1535267384 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1535267385} + - component: {fileID: 1535267389} + - component: {fileID: 1535267388} + - component: {fileID: 1535267387} + - component: {fileID: 1535267386} + - component: {fileID: 1535267391} + - component: {fileID: 1535267390} + m_Layer: 0 + m_Name: Target1 (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1535267385 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1535267384} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.81, y: 0.68, z: -0.75} + m_LocalScale: {x: 0.36332998, y: 1.19476, z: 0.36332998} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 870807627} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &1535267386 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1535267384} + serializedVersion: 2 + m_Mass: 0.5 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!23 &1535267387 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1535267384} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1535267388 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1535267384} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1535267389 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1535267384} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &1535267390 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1535267384} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!114 &1535267391 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1535267384} + 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: 1535267388} + m_DistanceField: {fileID: 0} +--- !u!1 &1715322543 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1715322546} + - component: {fileID: 1715322545} + - component: {fileID: 1715322544} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1715322544 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1715322543} + 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 &1715322545 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1715322543} + 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 &1715322546 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1715322543} + 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 &1804369591 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1804369595} + - component: {fileID: 1804369594} + - component: {fileID: 1804369593} + - component: {fileID: 1804369592} + - component: {fileID: 1804369596} + - component: {fileID: 1804369597} + m_Layer: 0 + m_Name: ChainHandle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1804369592 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1804369591} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1804369593 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1804369591} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1804369594 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1804369591} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1804369595 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1804369591} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.35, y: 3.145, z: 1.78} + m_LocalScale: {x: 0.5527207, y: 0.5527207, z: 0.5527207} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 28960622} + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1804369596 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1804369591} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cbe5860a158ab4ff9852d93167f38e5a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1804369597 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1804369591} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6da1d294c86704f3394415f542741ebe, type: 3} + m_Name: + m_EditorClassIdentifier: + minX: -5 + maxX: 5 + minY: 1 + maxY: 7 + minZ: 0 + maxZ: 2 +--- !u!1 &1989779174 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1989779175} + - component: {fileID: 1989779177} + - component: {fileID: 1989779176} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1989779175 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1989779174} + 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: 28960622} + 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} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 200, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1989779176 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1989779174} + 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: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Drag me around! +--- !u!222 &1989779177 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1989779174} + m_CullTransparentMesh: 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: 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 + colliderCCD: 1 + particleCCD: 0 + shockPropagation: 0 + surfaceCollisionIterations: 8 + surfaceCollisionTolerance: 0.005 + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + maxFoamVelocityStretch: 0.3 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + worldLinearInertiaScale: 0 + worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 + distanceConstraintParameters: + evaluationOrder: 0 + iterations: 5 + SORFactor: 1 + enabled: 1 + bendingConstraintParameters: + evaluationOrder: 0 + iterations: 1 + 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: 2 + SORFactor: 1 + enabled: 1 + pinConstraintParameters: + evaluationOrder: 1 + iterations: 2 + 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} + 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} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/Chains.unity.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/Chains.unity.meta new file mode 100644 index 00000000..00f01a26 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/Chains.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: de781a1f903154a98a617b786d36a330 +labels: +- ObiRope +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/ChainsSettings.lighting b/xiaofang/Assets/Obi/Samples/RopeAndRod/ChainsSettings.lighting new file mode 100644 index 00000000..e0a65d6c --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/ChainsSettings.lighting @@ -0,0 +1,64 @@ +%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: ChainsSettings + serializedVersion: 4 + 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_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_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 + m_PVRTiledBaking: 0 diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/ChainsSettings.lighting.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/ChainsSettings.lighting.meta new file mode 100644 index 00000000..c7ba969b --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/ChainsSettings.lighting.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 21c4fb2401b72496aa6ac0cb399992d5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4890085278179872738 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/CharacterTentacles.unity b/xiaofang/Assets/Obi/Samples/RopeAndRod/CharacterTentacles.unity new file mode 100644 index 00000000..56d7dc42 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/CharacterTentacles.unity @@ -0,0 +1,3902 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + 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: 135660571} +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &4043172 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4043174} + - component: {fileID: 4043173} + m_Layer: 0 + m_Name: BurstCollisionWorld + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &4043173 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4043172} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} + m_Name: + m_EditorClassIdentifier: + cellSpans: + m_AlignBytes: 16 +--- !u!4 &4043174 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4043172} + 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!850595691 &135660571 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Settings.lighting + serializedVersion: 4 + 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_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_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 + m_PVRTiledBaking: 0 +--- !u!1 &283647873 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 283647877} + - component: {fileID: 283647876} + - component: {fileID: 283647875} + - component: {fileID: 283647874} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &283647874 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 283647873} + 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 &283647875 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 283647873} + 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 &283647876 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 283647873} + 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_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &283647877 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 283647873} + 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!1001 &421764872 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_RootOrder + value: 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_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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + 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: c73079cca10924a80871331c66b4ad4b, type: 2} + filter: -65535 + m_SourceCollider: {fileID: 506459882} + m_DistanceField: {fileID: 0} +--- !u!1001 &630753787 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: -9172040529234819637, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9673613 + objectReference: {fileID: 0} + - target: {fileID: -9172040529234819637, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000085749997 + objectReference: {fileID: 0} + - target: {fileID: -9172040529234819637, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.25340128 + objectReference: {fileID: 0} + - target: {fileID: -9172040529234819637, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.000000085104034 + objectReference: {fileID: 0} + - target: {fileID: -9127106894692312864, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.076005585 + objectReference: {fileID: 0} + - target: {fileID: -9127106894692312864, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: -0.0000009329133 + objectReference: {fileID: 0} + - target: {fileID: -9127106894692312864, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: -0.000000032050593 + objectReference: {fileID: 0} + - target: {fileID: -9127106894692312864, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000016351461 + objectReference: {fileID: 0} + - target: {fileID: -9127106894692312864, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: 0.0000918619 + objectReference: {fileID: 0} + - target: {fileID: -9127106894692312864, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.00000037080153 + objectReference: {fileID: 0} + - target: {fileID: -9062284935739990963, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.13803966 + objectReference: {fileID: 0} + - target: {fileID: -9062284935739990963, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: 0.0000006921703 + objectReference: {fileID: 0} + - target: {fileID: -9062284935739990963, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: 4.4612557e-24 + objectReference: {fileID: 0} + - target: {fileID: -9062284935739990963, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9997556 + objectReference: {fileID: 0} + - target: {fileID: -9062284935739990963, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -2.674638e-23 + objectReference: {fileID: 0} + - target: {fileID: -9062284935739990963, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -8.774215e-25 + objectReference: {fileID: 0} + - target: {fileID: -9062284935739990963, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.022107491 + objectReference: {fileID: 0} + - target: {fileID: -8713422515971011683, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: -0.09805869 + objectReference: {fileID: 0} + - target: {fileID: -8713422515971011683, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.75200963 + objectReference: {fileID: 0} + - target: {fileID: -8713422515971011683, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.1149317 + objectReference: {fileID: 0} + - target: {fileID: -8713422515971011683, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.6416049 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8507949964929264032, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: 0.3605588 + objectReference: {fileID: 0} + - target: {fileID: -8507949964929264032, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: 0.000001475797 + objectReference: {fileID: 0} + - target: {fileID: -8507949964929264032, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: -0.12000207 + objectReference: {fileID: 0} + - target: {fileID: -8507949964929264032, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9999616 + objectReference: {fileID: 0} + - target: {fileID: -8507949964929264032, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000006304826 + objectReference: {fileID: 0} + - target: {fileID: -8507949964929264032, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: 0.00000006472847 + objectReference: {fileID: 0} + - target: {fileID: -8507949964929264032, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.008770416 + objectReference: {fileID: 0} + - target: {fileID: -8256864240980919291, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: 0.079857625 + objectReference: {fileID: 0} + - target: {fileID: -8256864240980919291, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: 0.00000021561436 + objectReference: {fileID: 0} + - target: {fileID: -8256864240980919291, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: -0.00000041068142 + objectReference: {fileID: 0} + - target: {fileID: -8256864240980919291, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9997641 + objectReference: {fileID: 0} + - target: {fileID: -8256864240980919291, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.00000030828565 + objectReference: {fileID: 0} + - target: {fileID: -8256864240980919291, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.021723872 + objectReference: {fileID: 0} + - target: {fileID: -8256864240980919291, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.0000000018401363 + objectReference: {fileID: 0} + - target: {fileID: -7959887483407685756, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9673612 + objectReference: {fileID: 0} + - target: {fileID: -7959887483407685756, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.000000096454954 + objectReference: {fileID: 0} + - target: {fileID: -7959887483407685756, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.2534013 + objectReference: {fileID: 0} + - target: {fileID: -7959887483407685756, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.00000026816386 + objectReference: {fileID: 0} + - target: {fileID: -7940801031966596053, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9997869 + objectReference: {fileID: 0} + - target: {fileID: -7940801031966596053, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.00000019754096 + objectReference: {fileID: 0} + - target: {fileID: -7940801031966596053, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.020645253 + objectReference: {fileID: 0} + - target: {fileID: -7940801031966596053, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.00000026657708 + objectReference: {fileID: 0} + - target: {fileID: -7477343846450812277, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.131298 + objectReference: {fileID: 0} + - target: {fileID: -7477343846450812277, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: 0.00000012670051 + objectReference: {fileID: 0} + - target: {fileID: -7477343846450812277, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: -1.3545083e-23 + objectReference: {fileID: 0} + - target: {fileID: -7477343846450812277, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -1.3234887e-23 + objectReference: {fileID: 0} + - target: {fileID: -7477343846450812277, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -1.3234887e-23 + objectReference: {fileID: 0} + - target: {fileID: -7477343846450812277, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.04408335 + objectReference: {fileID: 0} + - target: {fileID: -7272726868776662169, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.07985708 + objectReference: {fileID: 0} + - target: {fileID: -7272726868776662169, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: -0.0000006211092 + objectReference: {fileID: 0} + - target: {fileID: -7272726868776662169, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: -0.00000035218272 + objectReference: {fileID: 0} + - target: {fileID: -7272726868776662169, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.999764 + objectReference: {fileID: 0} + - target: {fileID: -7272726868776662169, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.00000028464626 + objectReference: {fileID: 0} + - target: {fileID: -7272726868776662169, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.021723874 + objectReference: {fileID: 0} + - target: {fileID: -7272726868776662169, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.00000023567608 + objectReference: {fileID: 0} + - target: {fileID: -6926694757232413474, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.11609173 + objectReference: {fileID: 0} + - target: {fileID: -6926694757232413474, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: -0.0000006205055 + objectReference: {fileID: 0} + - target: {fileID: -6926694757232413474, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: -2.5339291e-23 + objectReference: {fileID: 0} + - target: {fileID: -6926694757232413474, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9997856 + objectReference: {fileID: 0} + - target: {fileID: -6926694757232413474, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 1.67838e-26 + objectReference: {fileID: 0} + - target: {fileID: -6926694757232413474, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -1.3508905e-23 + objectReference: {fileID: 0} + - target: {fileID: -6926694757232413474, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.02070492 + objectReference: {fileID: 0} + - target: {fileID: -6781684182533653455, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9998917 + objectReference: {fileID: 0} + - target: {fileID: -6781684182533653455, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0.000000046167788 + objectReference: {fileID: 0} + - target: {fileID: -6781684182533653455, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.014715998 + objectReference: {fileID: 0} + - target: {fileID: -6781684182533653455, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.0000003796372 + objectReference: {fileID: 0} + - target: {fileID: -6674389897051338689, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.09154389 + objectReference: {fileID: 0} + - target: {fileID: -6674389897051338689, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: 0.019814068 + objectReference: {fileID: 0} + - target: {fileID: -6674389897051338689, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: 0.029995026 + objectReference: {fileID: 0} + - target: {fileID: -6674389897051338689, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9868013 + objectReference: {fileID: 0} + - target: {fileID: -6674389897051338689, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.04286784 + objectReference: {fileID: 0} + - target: {fileID: -6674389897051338689, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: 0.15011244 + objectReference: {fileID: 0} + - target: {fileID: -6674389897051338689, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.043033704 + objectReference: {fileID: 0} + - target: {fileID: -6573219111723820052, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: 0.07746935 + objectReference: {fileID: 0} + - target: {fileID: -6573219111723820052, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: -0.00000011263398 + objectReference: {fileID: 0} + - target: {fileID: -6573219111723820052, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: 0.00000026601356 + objectReference: {fileID: 0} + - target: {fileID: -6573219111723820052, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9999629 + objectReference: {fileID: 0} + - target: {fileID: -6573219111723820052, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0.000000003912018 + objectReference: {fileID: 0} + - target: {fileID: -6573219111723820052, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.008620441 + objectReference: {fileID: 0} + - target: {fileID: -6573219111723820052, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.0000003014023 + objectReference: {fileID: 0} + - target: {fileID: -6417551873659808624, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9998643 + objectReference: {fileID: 0} + - target: {fileID: -6417551873659808624, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000043958406 + objectReference: {fileID: 0} + - target: {fileID: -6417551873659808624, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: 0.016476296 + objectReference: {fileID: 0} + - target: {fileID: -6417551873659808624, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.000000022351731 + objectReference: {fileID: 0} + - target: {fileID: -6393091041921524369, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: 0.38948858 + objectReference: {fileID: 0} + - target: {fileID: -6393091041921524369, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: -0.00000035762787 + objectReference: {fileID: 0} + - target: {fileID: -6393091041921524369, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: 0.00000068545353 + objectReference: {fileID: 0} + - target: {fileID: -6393091041921524369, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.996377 + objectReference: {fileID: 0} + - target: {fileID: -6393091041921524369, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.000000074784985 + objectReference: {fileID: 0} + - target: {fileID: -6393091041921524369, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.00000009433492 + objectReference: {fileID: 0} + - target: {fileID: -6393091041921524369, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.0850472 + objectReference: {fileID: 0} + - target: {fileID: -6258611573451978496, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.06707212 + objectReference: {fileID: 0} + - target: {fileID: -6258611573451978496, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: -0.00000026388952 + objectReference: {fileID: 0} + - target: {fileID: -6258611573451978496, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: -0.00000005130626 + objectReference: {fileID: 0} + - target: {fileID: -6258611573451978496, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7131765 + objectReference: {fileID: 0} + - target: {fileID: -6258611573451978496, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000037058246 + objectReference: {fileID: 0} + - target: {fileID: -6258611573451978496, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.7009845 + objectReference: {fileID: 0} + - target: {fileID: -6258611573451978496, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.00000010890042 + objectReference: {fileID: 0} + - target: {fileID: -5999528792458690478, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: 0.08444196 + objectReference: {fileID: 0} + - target: {fileID: -5999528792458690478, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: 0.00000017999868 + objectReference: {fileID: 0} + - target: {fileID: -5999528792458690478, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: 0.00000047947316 + objectReference: {fileID: 0} + - target: {fileID: -5999528792458690478, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9993728 + objectReference: {fileID: 0} + - target: {fileID: -5999528792458690478, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000019766048 + objectReference: {fileID: 0} + - target: {fileID: -5999528792458690478, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: 0.035412785 + objectReference: {fileID: 0} + - target: {fileID: -5999528792458690478, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.00000008906854 + objectReference: {fileID: 0} + - target: {fileID: -5777574540501867108, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.015911011 + objectReference: {fileID: 0} + - target: {fileID: -5777574540501867108, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: 0.10465575 + objectReference: {fileID: 0} + - target: {fileID: -5777574540501867108, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.14946046 + objectReference: {fileID: 0} + - target: {fileID: -5625989425371717735, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: 0.096200675 + objectReference: {fileID: 0} + - target: {fileID: -5625989425371717735, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: -0.0000041543935 + objectReference: {fileID: 0} + - target: {fileID: -5625989425371717735, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: 0.00000016401833 + objectReference: {fileID: 0} + - target: {fileID: -5625989425371717735, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.99337167 + objectReference: {fileID: 0} + - target: {fileID: -5625989425371717735, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0.0000005252969 + objectReference: {fileID: 0} + - target: {fileID: -5625989425371717735, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.114947 + objectReference: {fileID: 0} + - target: {fileID: -5625989425371717735, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.00000034977057 + objectReference: {fileID: 0} + - target: {fileID: -5102611502599791723, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.38949007 + objectReference: {fileID: 0} + - target: {fileID: -5102611502599791723, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: 0.00000016205013 + objectReference: {fileID: 0} + - target: {fileID: -5102611502599791723, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: -0.000000029802322 + objectReference: {fileID: 0} + - target: {fileID: -5102611502599791723, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.99637693 + objectReference: {fileID: 0} + - target: {fileID: -5102611502599791723, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0.000000028656011 + objectReference: {fileID: 0} + - target: {fileID: -5102611502599791723, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.00000012047313 + objectReference: {fileID: 0} + - target: {fileID: -5102611502599791723, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.08504728 + objectReference: {fileID: 0} + - target: {fileID: -4705109256053941059, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: 0.089162216 + objectReference: {fileID: 0} + - target: {fileID: -4705109256053941059, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: -0.0000000481582 + objectReference: {fileID: 0} + - target: {fileID: -4705109256053941059, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: 0.0000005066395 + objectReference: {fileID: 0} + - target: {fileID: -4705109256053941059, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.999931 + objectReference: {fileID: 0} + - target: {fileID: -4705109256053941059, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.00000027567134 + objectReference: {fileID: 0} + - target: {fileID: -4705109256053941059, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.011748159 + objectReference: {fileID: 0} + - target: {fileID: -4705109256053941059, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.00000056624384 + objectReference: {fileID: 0} + - target: {fileID: -4421869768541714866, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: -0.060132556 + objectReference: {fileID: 0} + - target: {fileID: -4421869768541714866, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.9060736 + objectReference: {fileID: 0} + - target: {fileID: -4421869768541714866, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.13775198 + objectReference: {fileID: 0} + - target: {fileID: -4421869768541714866, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.39552408 + objectReference: {fileID: 0} + - target: {fileID: -3575167729457297781, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9997869 + objectReference: {fileID: 0} + - target: {fileID: -3575167729457297781, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.00000012771564 + objectReference: {fileID: 0} + - target: {fileID: -3575167729457297781, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.020644851 + objectReference: {fileID: 0} + - target: {fileID: -3575167729457297781, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.000000026669264 + objectReference: {fileID: 0} + - target: {fileID: -3168850724122587569, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 5c0346dbcbacd4648bec909deff79751, type: 2} + - target: {fileID: -3057246181936861889, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.09765384 + objectReference: {fileID: 0} + - target: {fileID: -3057246181936861889, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: -0.0000011825355 + objectReference: {fileID: 0} + - target: {fileID: -3057246181936861889, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: -0.00000001124732 + objectReference: {fileID: 0} + - target: {fileID: -3057246181936861889, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.99960923 + objectReference: {fileID: 0} + - target: {fileID: -3057246181936861889, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.00000006675473 + objectReference: {fileID: 0} + - target: {fileID: -3057246181936861889, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.00000005947614 + objectReference: {fileID: 0} + - target: {fileID: -3057246181936861889, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.027953517 + objectReference: {fileID: 0} + - target: {fileID: -3011178037101974448, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9240753 + objectReference: {fileID: 0} + - target: {fileID: -3011178037101974448, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.000000079963314 + objectReference: {fileID: 0} + - target: {fileID: -3011178037101974448, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3822104 + objectReference: {fileID: 0} + - target: {fileID: -3011178037101974448, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.00000040074227 + objectReference: {fileID: 0} + - target: {fileID: -2765548614572629195, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: 0.067074396 + objectReference: {fileID: 0} + - target: {fileID: -2765548614572629195, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: 0.00000027970933 + objectReference: {fileID: 0} + - target: {fileID: -2765548614572629195, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: -0.00000027811154 + objectReference: {fileID: 0} + - target: {fileID: -2765548614572629195, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7131767 + objectReference: {fileID: 0} + - target: {fileID: -2765548614572629195, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000087264226 + objectReference: {fileID: 0} + - target: {fileID: -2765548614572629195, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.70098436 + objectReference: {fileID: 0} + - target: {fileID: -2765548614572629195, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.00000015630894 + objectReference: {fileID: 0} + - target: {fileID: -1607268682270953884, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.16180958 + objectReference: {fileID: 0} + - target: {fileID: -1607268682270953884, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -1607268682270953884, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: -1.7829252e-16 + objectReference: {fileID: 0} + - target: {fileID: -1607268682270953884, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9999386 + objectReference: {fileID: 0} + - target: {fileID: -1607268682270953884, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -1.622888e-16 + objectReference: {fileID: 0} + - target: {fileID: -1607268682270953884, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -1.8379094e-16 + objectReference: {fileID: 0} + - target: {fileID: -1607268682270953884, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.011078295 + objectReference: {fileID: 0} + - target: {fileID: -1336073094781112630, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9999461 + objectReference: {fileID: 0} + - target: {fileID: -1336073094781112630, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000011176248 + objectReference: {fileID: 0} + - target: {fileID: -1336073094781112630, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.010379425 + objectReference: {fileID: 0} + - target: {fileID: -1336073094781112630, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.0000004684022 + objectReference: {fileID: 0} + - target: {fileID: -1054683304811679433, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.096602775 + objectReference: {fileID: 0} + - target: {fileID: -1054683304811679433, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: 0.0000011904067 + objectReference: {fileID: 0} + - target: {fileID: -1054683304811679433, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: -6.661338e-16 + objectReference: {fileID: 0} + - target: {fileID: -1054683304811679433, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9999919 + objectReference: {fileID: 0} + - target: {fileID: -1054683304811679433, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -1054683304811679433, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -3.5527124e-15 + objectReference: {fileID: 0} + - target: {fileID: -1054683304811679433, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.0040303958 + objectReference: {fileID: 0} + - target: {fileID: -749513139196117795, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.025980778 + objectReference: {fileID: 0} + - target: {fileID: -749513139196117795, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: 0.0028839873 + objectReference: {fileID: 0} + - target: {fileID: -749513139196117795, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: 0.123216964 + objectReference: {fileID: 0} + - target: {fileID: -749513139196117795, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.6993336 + objectReference: {fileID: 0} + - target: {fileID: -749513139196117795, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.11304512 + objectReference: {fileID: 0} + - target: {fileID: -749513139196117795, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: 0.6966161 + objectReference: {fileID: 0} + - target: {fileID: -749513139196117795, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.11348696 + objectReference: {fileID: 0} + - target: {fileID: -668384516862315930, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.06837573 + objectReference: {fileID: 0} + - target: {fileID: -668384516862315930, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: 0.00000076163815 + objectReference: {fileID: 0} + - target: {fileID: -668384516862315930, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: -1.9251176e-15 + objectReference: {fileID: 0} + - target: {fileID: -668384516862315930, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.50787014 + objectReference: {fileID: 0} + - target: {fileID: -668384516862315930, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0.50787 + objectReference: {fileID: 0} + - target: {fileID: -668384516862315930, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: 0.4920044 + objectReference: {fileID: 0} + - target: {fileID: -668384516862315930, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.4920037 + objectReference: {fileID: 0} + - target: {fileID: 726893922322061280, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.08916224 + objectReference: {fileID: 0} + - target: {fileID: 726893922322061280, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: -0.0000006825817 + objectReference: {fileID: 0} + - target: {fileID: 726893922322061280, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: 0.00000032782555 + objectReference: {fileID: 0} + - target: {fileID: 726893922322061280, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.999931 + objectReference: {fileID: 0} + - target: {fileID: 726893922322061280, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000032037482 + objectReference: {fileID: 0} + - target: {fileID: 726893922322061280, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.011748398 + objectReference: {fileID: 0} + - target: {fileID: 726893922322061280, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.00000087171753 + objectReference: {fileID: 0} + - target: {fileID: 848833919448333585, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.07399611 + objectReference: {fileID: 0} + - target: {fileID: 848833919448333585, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: 0.000000018044375 + objectReference: {fileID: 0} + - target: {fileID: 848833919448333585, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: -0.00000024284236 + objectReference: {fileID: 0} + - target: {fileID: 848833919448333585, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.99913293 + objectReference: {fileID: 0} + - target: {fileID: 848833919448333585, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.00000009685749 + objectReference: {fileID: 0} + - target: {fileID: 848833919448333585, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.041632984 + objectReference: {fileID: 0} + - target: {fileID: 848833919448333585, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.00000003725288 + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_Name + value: tentacle_guy + objectReference: {fileID: 0} + - target: {fileID: 1002887218015374962, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.0954839 + objectReference: {fileID: 0} + - target: {fileID: 1002887218015374962, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: 0.0000013858289 + objectReference: {fileID: 0} + - target: {fileID: 1002887218015374962, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: 2.978115e-23 + objectReference: {fileID: 0} + - target: {fileID: 1002887218015374962, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9997476 + objectReference: {fileID: 0} + - target: {fileID: 1002887218015374962, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000006708002 + objectReference: {fileID: 0} + - target: {fileID: 1002887218015374962, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: 0.000000059109013 + objectReference: {fileID: 0} + - target: {fileID: 1002887218015374962, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.022468973 + objectReference: {fileID: 0} + - target: {fileID: 2040772738850610504, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.99989176 + objectReference: {fileID: 0} + - target: {fileID: 2040772738850610504, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.000000406647 + objectReference: {fileID: 0} + - target: {fileID: 2040772738850610504, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.014715532 + objectReference: {fileID: 0} + - target: {fileID: 2040772738850610504, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.00000034439248 + objectReference: {fileID: 0} + - target: {fileID: 2115105493465890901, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.91017807 + objectReference: {fileID: 0} + - target: {fileID: 2115105493465890901, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.058945026 + objectReference: {fileID: 0} + - target: {fileID: 2115105493465890901, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: 0.3856826 + objectReference: {fileID: 0} + - target: {fileID: 2115105493465890901, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.13910525 + objectReference: {fileID: 0} + - target: {fileID: 2527769708469969364, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9999462 + objectReference: {fileID: 0} + - target: {fileID: 2527769708469969364, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000004621701 + objectReference: {fileID: 0} + - target: {fileID: 2527769708469969364, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.010380278 + objectReference: {fileID: 0} + - target: {fileID: 2527769708469969364, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.00000042109525 + objectReference: {fileID: 0} + - target: {fileID: 2545839310169955134, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.13695669 + objectReference: {fileID: 0} + - target: {fileID: 2545839310169955134, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: -0.000000086856744 + objectReference: {fileID: 0} + - target: {fileID: 2545839310169955134, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: -3.352935e-24 + objectReference: {fileID: 0} + - target: {fileID: 2545839310169955134, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 2.528061e-23 + objectReference: {fileID: 0} + - target: {fileID: 2545839310169955134, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: 2.7607765e-23 + objectReference: {fileID: 0} + - target: {fileID: 2545839310169955134, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.0002494603 + objectReference: {fileID: 0} + - target: {fileID: 2548148072889551224, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.07817295 + objectReference: {fileID: 0} + - target: {fileID: 2548148072889551224, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: 0.0000006044712 + objectReference: {fileID: 0} + - target: {fileID: 2548148072889551224, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: 2.6648715e-15 + objectReference: {fileID: 0} + - target: {fileID: 2548148072889551224, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.99932706 + objectReference: {fileID: 0} + - target: {fileID: 2548148072889551224, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -7.235696e-15 + objectReference: {fileID: 0} + - target: {fileID: 2548148072889551224, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: 2.6358296e-17 + objectReference: {fileID: 0} + - target: {fileID: 2548148072889551224, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.036680877 + objectReference: {fileID: 0} + - target: {fileID: 2683500738491615210, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: 0.09154131 + objectReference: {fileID: 0} + - target: {fileID: 2683500738491615210, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: -0.019814856 + objectReference: {fileID: 0} + - target: {fileID: 2683500738491615210, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: -0.029994963 + objectReference: {fileID: 0} + - target: {fileID: 2683500738491615210, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9868012 + objectReference: {fileID: 0} + - target: {fileID: 2683500738491615210, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.042868104 + objectReference: {fileID: 0} + - target: {fileID: 2683500738491615210, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: 0.15011238 + objectReference: {fileID: 0} + - target: {fileID: 2683500738491615210, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.04303395 + objectReference: {fileID: 0} + - target: {fileID: 2885808408270941255, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9998377 + objectReference: {fileID: 0} + - target: {fileID: 2885808408270941255, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.00000029057247 + objectReference: {fileID: 0} + - target: {fileID: 2885808408270941255, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: 0.01801591 + objectReference: {fileID: 0} + - target: {fileID: 2885808408270941255, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.00000032316873 + objectReference: {fileID: 0} + - target: {fileID: 3027249137484211221, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.36055765 + objectReference: {fileID: 0} + - target: {fileID: 3027249137484211221, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: -0.000000654778 + objectReference: {fileID: 0} + - target: {fileID: 3027249137484211221, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: 0.119999975 + objectReference: {fileID: 0} + - target: {fileID: 3027249137484211221, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9999616 + objectReference: {fileID: 0} + - target: {fileID: 3027249137484211221, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.0000002816878 + objectReference: {fileID: 0} + - target: {fileID: 3027249137484211221, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: 0.000000090692986 + objectReference: {fileID: 0} + - target: {fileID: 3027249137484211221, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.008770382 + objectReference: {fileID: 0} + - target: {fileID: 3748059883230484020, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: 0.07600899 + objectReference: {fileID: 0} + - target: {fileID: 3748059883230484020, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: 0.0000033013807 + objectReference: {fileID: 0} + - target: {fileID: 3748059883230484020, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: 0.0000003043242 + objectReference: {fileID: 0} + - target: {fileID: 3748059883230484020, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000002865076 + objectReference: {fileID: 0} + - target: {fileID: 3748059883230484020, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: 0.000091515416 + objectReference: {fileID: 0} + - target: {fileID: 3748059883230484020, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.00000029622154 + objectReference: {fileID: 0} + - target: {fileID: 4407419453612453932, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.096199326 + objectReference: {fileID: 0} + - target: {fileID: 4407419453612453932, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: 0.00000032708925 + objectReference: {fileID: 0} + - target: {fileID: 4407419453612453932, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: 0.00000015854654 + objectReference: {fileID: 0} + - target: {fileID: 4407419453612453932, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9933717 + objectReference: {fileID: 0} + - target: {fileID: 4407419453612453932, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.00000015502661 + objectReference: {fileID: 0} + - target: {fileID: 4407419453612453932, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.114946775 + objectReference: {fileID: 0} + - target: {fileID: 4407419453612453932, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.0000006191552 + objectReference: {fileID: 0} + - target: {fileID: 4990029417244473137, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.084438704 + objectReference: {fileID: 0} + - target: {fileID: 4990029417244473137, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: -0.00000031601576 + objectReference: {fileID: 0} + - target: {fileID: 4990029417244473137, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: 0.00000009547176 + objectReference: {fileID: 0} + - target: {fileID: 4990029417244473137, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9993728 + objectReference: {fileID: 0} + - target: {fileID: 4990029417244473137, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000009846002 + objectReference: {fileID: 0} + - target: {fileID: 4990029417244473137, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: 0.035413384 + objectReference: {fileID: 0} + - target: {fileID: 4990029417244473137, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.00000084382555 + objectReference: {fileID: 0} + - target: {fileID: 5146824284552866293, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9998643 + objectReference: {fileID: 0} + - target: {fileID: 5146824284552866293, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.00000008195636 + objectReference: {fileID: 0} + - target: {fileID: 5146824284552866293, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: 0.016477132 + objectReference: {fileID: 0} + - target: {fileID: 5146824284552866293, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.00000016391272 + objectReference: {fileID: 0} + - target: {fileID: 5536388351197450959, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.99983776 + objectReference: {fileID: 0} + - target: {fileID: 5536388351197450959, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000026449558 + objectReference: {fileID: 0} + - target: {fileID: 5536388351197450959, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: 0.018015712 + objectReference: {fileID: 0} + - target: {fileID: 5536388351197450959, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.000000104308114 + objectReference: {fileID: 0} + - target: {fileID: 5866666021909216657, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_Controller + value: + objectReference: {fileID: 9100000, guid: e2cf68ff4b1ffda45a77f7307dd789b9, type: 2} + - target: {fileID: 7514784303115233714, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: 0.07399581 + objectReference: {fileID: 0} + - target: {fileID: 7514784303115233714, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: 0.0000007833587 + objectReference: {fileID: 0} + - target: {fileID: 7514784303115233714, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: -0.00000093120616 + objectReference: {fileID: 0} + - target: {fileID: 7514784303115233714, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.999133 + objectReference: {fileID: 0} + - target: {fileID: 7514784303115233714, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0.0000000931322 + objectReference: {fileID: 0} + - target: {fileID: 7514784303115233714, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.041632738 + objectReference: {fileID: 0} + - target: {fileID: 7514784303115233714, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.00000021560105 + objectReference: {fileID: 0} + - target: {fileID: 8136026706196182388, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: 0.025980074 + objectReference: {fileID: 0} + - target: {fileID: 8136026706196182388, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: -0.0028832932 + objectReference: {fileID: 0} + - target: {fileID: 8136026706196182388, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: -0.12321914 + objectReference: {fileID: 0} + - target: {fileID: 8136026706196182388, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.69933337 + objectReference: {fileID: 0} + - target: {fileID: 8136026706196182388, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 0.11304568 + objectReference: {fileID: 0} + - target: {fileID: 8136026706196182388, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: 0.6966165 + objectReference: {fileID: 0} + - target: {fileID: 8136026706196182388, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.11348599 + objectReference: {fileID: 0} + - target: {fileID: 8216163743844190192, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.07746965 + objectReference: {fileID: 0} + - target: {fileID: 8216163743844190192, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: -0.00000034869197 + objectReference: {fileID: 0} + - target: {fileID: 8216163743844190192, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: 0.0000009873088 + objectReference: {fileID: 0} + - target: {fileID: 8216163743844190192, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9999629 + objectReference: {fileID: 0} + - target: {fileID: 8216163743844190192, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000016698372 + objectReference: {fileID: 0} + - target: {fileID: 8216163743844190192, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.00862035 + objectReference: {fileID: 0} + - target: {fileID: 8216163743844190192, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.00000045288584 + objectReference: {fileID: 0} + - target: {fileID: 8561469618316601768, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.9240752 + objectReference: {fileID: 0} + - target: {fileID: 8561469618316601768, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000005432585 + objectReference: {fileID: 0} + - target: {fileID: 8561469618316601768, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0.38221073 + objectReference: {fileID: 0} + - target: {fileID: 8561469618316601768, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: -0.00000024494446 + objectReference: {fileID: 0} + - target: {fileID: 8663071241739252781, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.x + value: -0.08463762 + objectReference: {fileID: 0} + - target: {fileID: 8663071241739252781, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.y + value: 0.00000065604956 + objectReference: {fileID: 0} + - target: {fileID: 8663071241739252781, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalPosition.z + value: 9.344483e-16 + objectReference: {fileID: 0} + - target: {fileID: 8663071241739252781, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.w + value: 0.999968 + objectReference: {fileID: 0} + - target: {fileID: 8663071241739252781, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.x + value: 2.843463e-17 + objectReference: {fileID: 0} + - target: {fileID: 8663071241739252781, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 8663071241739252781, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + propertyPath: m_LocalRotation.z + value: 0.008003575 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} +--- !u!1 &786287851 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: -7689614540460225619, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + m_PrefabInstance: {fileID: 630753787} + m_PrefabAsset: {fileID: 0} +--- !u!114 &786287853 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 786287851} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7be315bc5964b4fbca6cf0a978ff76a1, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c000000 + m_AlignBytes: 16 + groupID: 1 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_SelfCollisions: 0 + _radius: + multiplier: 0.1 + 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: 0.2877426 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + _mass: + multiplier: 0.1 + 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 + _rotationalMass: + multiplier: 0.1 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0.29166412 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0.02357483 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + _skinConstraintsEnabled: 1 + _skinCompliance: + multiplier: 0.01 + 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 + _skinRadius: + multiplier: 0.1 + 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 + _stretchShearConstraintsEnabled: 1 + _stretchCompliance: + multiplier: 0 + 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 + _shear1Compliance: + multiplier: 0 + 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 + _shear2Compliance: + multiplier: 0 + 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 + _bendTwistConstraintsEnabled: 1 + _torsionCompliance: + multiplier: 0 + 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 + _bend1Compliance: + multiplier: 0.1 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.32546997 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + _bend2Compliance: + multiplier: 0.05 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.37026978 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + _plasticYield: + multiplier: 0 + 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 + _plasticCreep: + multiplier: 0 + 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 + _aerodynamicsEnabled: 1 + _drag: + multiplier: 0.05 + 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 + ignored: [] +--- !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} + - component: {fileID: 1002464894} + 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!114 &1002464894 +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: 7118f3a432315464297cab517f322eca, type: 3} + m_Name: + m_EditorClassIdentifier: + target: {fileID: 0} + extrapolation: 1 + smoothness: 0.995 + linearSpeed: 1 + rotationalSpeed: 1 + distanceFromTarget: 3 +--- !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_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 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} + m_LocalRotation: {x: 0.15760262, y: 0, z: 0, w: 0.98750263} + m_LocalPosition: {x: 0, y: 3.34, z: -4.79} + 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 &1080600881 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + m_PrefabInstance: {fileID: 630753787} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1080600882 +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: de9bce9a2c43c424d81e85ea229e0004, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1080600883 +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: 30974edc9036841cebffee1d18425185, type: 3} + m_Name: + m_EditorClassIdentifier: + m_MovingTurnSpeed: 360 + m_StationaryTurnSpeed: 180 + m_JumpPower: 6 + m_GravityMultiplier: 2 + m_RunCycleLegOffset: 0.2 + m_MoveSpeedMultiplier: 1 + m_AnimSpeedMultiplier: 1 + m_GroundCheckDistance: 0.2 +--- !u!136 &1080600884 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1080600881} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.2 + m_Height: 2.2 + m_Direction: 1 + m_Center: {x: 0, y: 1.1, z: 0} +--- !u!54 &1080600885 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1080600881} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!114 &1080600887 +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: 9d174fab52f0c4b8399f25d5c3ea524c, type: 3} + m_Name: + 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.6 + maxAnisotropy: 3 + sleepThreshold: 0.001 + maxVelocity: 10 + maxAngularVelocity: 10 + collisionMargin: 0.02 + maxDepenetration: 10 + colliderCCD: 1 + particleCCD: 0 + shockPropagation: 0 + surfaceCollisionIterations: 8 + surfaceCollisionTolerance: 0.005 + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 4 + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 0 + foamSubsteps: 1 + maxFoamVelocityStretch: 0.3 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + worldLinearInertiaScale: 0.5 + worldAngularInertiaScale: 0.1 + synchronousSpatialQueries: 0 + distanceConstraintParameters: + evaluationOrder: 0 + iterations: 1 + SORFactor: 1 + enabled: 0 + bendingConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 0 + particleCollisionConstraintParameters: + evaluationOrder: 0 + iterations: 1 + SORFactor: 1 + enabled: 0 + particleFrictionConstraintParameters: + evaluationOrder: 1 + iterations: 1 + 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: 1 + SORFactor: 1 + enabled: 1 + volumeConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 0 + shapeMatchingConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 0 + tetherConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 0 + pinConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 0 + stitchConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 0 + densityConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 0 + 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!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: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.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_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1175446146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + 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: 3 + m_LocalEulerAnglesHint: {x: 56.052002, y: -22.431002, z: 23.642} +--- !u!1 &1660007473 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1660007474} + - component: {fileID: 1660007476} + - component: {fileID: 1660007475} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1660007474 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1660007473} + 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} + m_AnchoredPosition: {x: 108.20001, y: 39.100006} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1660007475 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1660007473} + 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: 16 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Use WASD to move around. +--- !u!222 &1660007476 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1660007473} + m_CullTransparentMesh: 0 +--- !u!1 &1723533911 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 2959690789404077516, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + m_PrefabInstance: {fileID: 630753787} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1723533913 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1723533911} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7be315bc5964b4fbca6cf0a978ff76a1, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 0d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000 + m_AlignBytes: 16 + groupID: 2 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_SelfCollisions: 0 + _radius: + multiplier: 0.04 + 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: 0.4646225 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + _mass: + multiplier: 2 + 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 + _rotationalMass: + multiplier: 0.1 + 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: 0.9874878 + value: 0.070755005 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + _skinConstraintsEnabled: 1 + _skinCompliance: + multiplier: 0.05 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0.3583336 + value: 0.09196854 + 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 + _skinRadius: + multiplier: 0.02 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0.4750023 + value: 0.049533844 + 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 + _stretchShearConstraintsEnabled: 1 + _stretchCompliance: + multiplier: 0 + 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 + _shear1Compliance: + multiplier: 0 + 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 + _shear2Compliance: + multiplier: 0 + 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 + _bendTwistConstraintsEnabled: 1 + _torsionCompliance: + multiplier: 0 + 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 + _bend1Compliance: + multiplier: 0.05 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.32546997 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + _bend2Compliance: + multiplier: 0.05 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.37026978 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + _plasticYield: + multiplier: 0 + 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 + _plasticCreep: + multiplier: 0 + 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 + _aerodynamicsEnabled: 1 + _drag: + multiplier: 0.05 + 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 + ignored: [] +--- !u!1 &1737943986 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 3534394712648722870, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + m_PrefabInstance: {fileID: 630753787} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1737943989 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1737943986} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7be315bc5964b4fbca6cf0a978ff76a1, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b000000 + m_AlignBytes: 16 + groupID: 3 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_SelfCollisions: 0 + _radius: + multiplier: 0.1 + 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: 0.4646225 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + _mass: + multiplier: 0.1 + 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 + _rotationalMass: + 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: 0.9874878 + value: 0.070755005 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + _skinConstraintsEnabled: 1 + _skinCompliance: + multiplier: 0.01 + 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 + _skinRadius: + multiplier: 1.2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.31603622 + 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 + _stretchShearConstraintsEnabled: 1 + _stretchCompliance: + multiplier: 0 + 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 + _shear1Compliance: + multiplier: 0 + 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 + _shear2Compliance: + multiplier: 0 + 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 + _bendTwistConstraintsEnabled: 1 + _torsionCompliance: + multiplier: 0 + 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 + _bend1Compliance: + multiplier: 0.1 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.32546997 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + _bend2Compliance: + multiplier: 0.05 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.37026978 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + _plasticYield: + multiplier: 0 + 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 + _plasticCreep: + multiplier: 0 + 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 + _aerodynamicsEnabled: 1 + _drag: + multiplier: 0.05 + 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 + ignored: [] +--- !u!1 &1908960879 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 293062933868311820, guid: 643a73163dc8d4f0e904d6c0f6857999, type: 3} + m_PrefabInstance: {fileID: 630753787} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1908960881 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1908960879} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7be315bc5964b4fbca6cf0a978ff76a1, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 2c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000 + m_AlignBytes: 16 + groupID: 4 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_SelfCollisions: 0 + _radius: + multiplier: 0.1 + 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: 0.2877426 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + _mass: + multiplier: 0.1 + 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 + _rotationalMass: + multiplier: 0.1 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0.29166412 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0.02357483 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + _skinConstraintsEnabled: 1 + _skinCompliance: + multiplier: 0.01 + 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 + _skinRadius: + multiplier: 0.1 + 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 + _stretchShearConstraintsEnabled: 1 + _stretchCompliance: + multiplier: 0 + 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 + _shear1Compliance: + multiplier: 0 + 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 + _shear2Compliance: + multiplier: 0 + 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 + _bendTwistConstraintsEnabled: 1 + _torsionCompliance: + multiplier: 0 + 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 + _bend1Compliance: + multiplier: 0.1 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.32546997 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + _bend2Compliance: + multiplier: 0.05 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.37026978 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + _plasticYield: + multiplier: 0 + 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 + _plasticCreep: + multiplier: 0 + 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 + _aerodynamicsEnabled: 1 + _drag: + multiplier: 0.05 + 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 + ignored: [] diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/CharacterTentacles.unity.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/CharacterTentacles.unity.meta new file mode 100644 index 00000000..117d03d4 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/CharacterTentacles.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ad63c807aee2f44b28fa2bcd46634d88 +labels: +- ObiRope +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/ComputeRopes.unity b/xiaofang/Assets/Obi/Samples/RopeAndRod/ComputeRopes.unity new file mode 100644 index 00000000..5af1c59d --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/ComputeRopes.unity @@ -0,0 +1,39781 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + 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: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &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} + 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_RootOrder: 1 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 0 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 5 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 7 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 5 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 6 + 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} + 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_RootOrder: 6 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 3 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 2 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 3 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 7 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 5 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 9 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 5 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 6 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 2 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 5 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 3 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 9 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 7 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 0 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 8 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 5 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 5 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 4 + 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} + 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_RootOrder: 0 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 4 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 2 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 3 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 8 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 1 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 9 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 9 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 9 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 6 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 6 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 7 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 4 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 7 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 7 + 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_Compliance: 0 + m_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_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: + 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_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} + 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_RootOrder: 8 + 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} + 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_RootOrder: 6 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 0 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 0 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 1 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 8 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 8 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 5 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 1 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 7 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 1 + 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} + 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_RootOrder: 2 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 5 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 2 + 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_Compliance: 0 + m_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_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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + 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} + 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_RootOrder: 2 + 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} + 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_RootOrder: 6 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 6 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 8 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 8 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 3 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 4 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 6 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 3 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 4 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 1 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 5 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 8 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 0 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 5 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 6 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 4 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 3 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 7 + 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} + 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_RootOrder: 3 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 1 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 7 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 9 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 3 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 7 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 4 + 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} + 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_RootOrder: 2 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 7 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 9 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 3 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 8 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 4 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 6 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 5 + 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_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!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_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!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_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!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_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!4 &792243024 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792672112} + 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_RootOrder: 3 + 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} + 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_RootOrder: 2 + 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} + 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_RootOrder: 1 + 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} + 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_RootOrder: 0 + 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} + 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_RootOrder: 4 + 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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + 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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + 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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + 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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + 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} + 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_RootOrder: 6 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 9 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 0 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 8 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 7 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 6 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 6 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 1 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 8 + 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} + 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 &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} + 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_RootOrder: 0 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 0 + 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} + 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_RootOrder: 0 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 8 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 0 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 9 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 2 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 4 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 3 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 8 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 1 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 1 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 5 + 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_Compliance: 0 + m_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_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_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 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} + 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_RootOrder: 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} + 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_RootOrder: 4 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 0 + 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} + 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_RootOrder: 6 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 4 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 6 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 3 + 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} + 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_RootOrder: 1 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 3 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 0 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 3 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 0 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 1 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 0 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 2 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 8 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 9 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 4 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 5 + 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_Compliance: 0 + m_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_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: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.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_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1175446146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + 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 &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} + 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_RootOrder: 3 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 9 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 2 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 6 + 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} + 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_RootOrder: 9 + 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} + 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_RootOrder: 1 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 7 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 3 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 7 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 9 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 0 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 2 + 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} + 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_RootOrder: 8 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 5 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 6 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 1 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 0 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 0 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 2 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 5 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 5 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 5 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 6 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 0 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 1 + 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} + 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_RootOrder: 9 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 2 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 2 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 8 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 7 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 1 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 1 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 7 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 1 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!95 &1561375949 +Animator: + serializedVersion: 5 + 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_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} + 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_RootOrder: 2 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 2 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 4 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 2 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 8 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 0 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 2 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 2 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 4 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 3 + 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} + 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_RootOrder: 6 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 4 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 1 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 7 + 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} + 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_RootOrder: 3 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 8 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 4 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 7 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 4 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 7 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 2 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 9 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 0 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 1 + 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} + 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_RootOrder: 7 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 8 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 8 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 9 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 9 + 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} + 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_RootOrder: 5 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 7 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 9 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 4 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 4 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 3 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 2 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 3 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 9 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 4 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 6 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 4 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 1 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 4 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 9 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 8 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 8 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 5 + 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} + 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_RootOrder: 5 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 1 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 0 + 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} + 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_RootOrder: 9 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 0 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 9 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 2 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 1 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 7 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 5 + 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_Compliance: 0 + m_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_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 + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + maxFoamVelocityStretch: 0.3 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + 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 + 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} + 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_RootOrder: 3 + 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} + 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_RootOrder: 3 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 3 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 6 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 0 + 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 + 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_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 1.5 + m_Height: 5 + m_Direction: 2 + m_Center: {x: 0, y: 0, z: 2.5} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/ComputeRopes.unity.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/ComputeRopes.unity.meta new file mode 100644 index 00000000..d25af1a9 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/ComputeRopes.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8fafd98b75e9b44ee8b37edf6f1adcd5 +labels: +- ObiRope +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/Crane.unity b/xiaofang/Assets/Obi/Samples/RopeAndRod/Crane.unity new file mode 100644 index 00000000..a6a75569 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/Crane.unity @@ -0,0 +1,2888 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + 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: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &60958071 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 60958072} + - component: {fileID: 60958074} + - component: {fileID: 60958075} + m_Layer: 0 + m_Name: Crane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &60958072 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 60958071} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1929056558} + - {fileID: 1625299420} + - {fileID: 352165316} + - {fileID: 803669724} + - {fileID: 1704083325} + - {fileID: 71297250} + - {fileID: 1647661431} + - {fileID: 1623874906} + - {fileID: 1076874526} + - {fileID: 1346965650} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &60958074 +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: 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.001 + maxVelocity: 50 + maxAngularVelocity: 10 + collisionMargin: 0.005 + maxDepenetration: 5 + colliderCCD: 1 + particleCCD: 0 + shockPropagation: 0 + surfaceCollisionIterations: 8 + surfaceCollisionTolerance: 0.005 + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 0 + foamSubsteps: 1 + maxFoamVelocityStretch: 0.3 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + 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: 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 + 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!114 &60958075 +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: 5551d37f45fd044ff8768019501c20a5, type: 3} + m_Name: + m_EditorClassIdentifier: + speed: 1 +--- !u!1 &71297249 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 71297250} + - component: {fileID: 71297253} + - component: {fileID: 71297252} + - component: {fileID: 71297251} + m_Layer: 0 + m_Name: Fixpoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &71297250 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 71297249} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.222, y: 3.026, z: 0} + m_LocalScale: {x: 0.30636996, y: 0.10934244, z: 0.10934244} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 60958072} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &71297251 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 71297249} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &71297252 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 71297249} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &71297253 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 71297249} + 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_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_RootOrder: 5 + 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 &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} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.91, y: 3.45, z: -0.22} + m_LocalScale: {x: 2, y: 0.1, z: 0.1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 60958072} + m_RootOrder: 2 + 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_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_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: + 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_SourcePrefab: {fileID: 100100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} +--- !u!1 &476562058 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 476562059} + - component: {fileID: 476562062} + - component: {fileID: 476562061} + - component: {fileID: 476562060} + - component: {fileID: 476562063} + m_Layer: 0 + m_Name: side (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &476562059 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 476562058} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -1, z: 0.000000027727193} + m_LocalScale: {x: 1.3271179, y: 0.108844705, z: 1.3271178} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1704083325} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!65 &476562060 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 476562058} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1.0000001, y: 2.0000005, z: 1.0000006} + m_Center: {x: 0.000000059604645, y: -2.5410988e-21, z: -0.000000089406996} +--- !u!23 &476562061 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 476562058} + 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: e78e1b735e05b4dee88b279cb6997001, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &476562062 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 476562058} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &476562063 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 476562058} + 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: 476562060} + m_DistanceField: {fileID: 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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + 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!850595691 &664654699 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Settings.lighting + serializedVersion: 4 + 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_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_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 + m_PVRTiledBaking: 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_RootOrder: 1 + 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,A,S,D to control the crane. +--- !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 &803669723 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 803669724} + - component: {fileID: 803669727} + - component: {fileID: 803669725} + 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 &803669724 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 803669723} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.91, y: 3.45, z: 0.22} + m_LocalScale: {x: 2, y: 0.1, z: 0.1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 60958072} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &803669725 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 803669723} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &803669727 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 803669723} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 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_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 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} + 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!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} + m_Layer: 0 + m_Name: Load + 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_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_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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + 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} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.209, y: 1.65, z: 0} + m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, 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: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + 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!1 &1076874525 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1076874526} + - component: {fileID: 1076874529} + - component: {fileID: 1076874528} + - component: {fileID: 1076874527} + m_Layer: 0 + m_Name: Fixpoint (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1076874526 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1076874525} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.222, y: 0.995, z: 0} + m_LocalScale: {x: 0.30637, y: 0.10934, z: 0.10934} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 60958072} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1076874527 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1076874525} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1076874528 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1076874525} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1076874529 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1076874525} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 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: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.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_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1175446146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + 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 &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} + 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 &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: 1346965646} + - component: {fileID: 1346965643} + - component: {fileID: 1346965642} + - component: {fileID: 1346965651} + - component: {fileID: 1346965649} + - component: {fileID: 1346965648} + - component: {fileID: 1346965647} + - component: {fileID: 1346965652} + - component: {fileID: 1346965653} + - component: {fileID: 1346965654} + 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: 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: 1 + uvScale: {x: 1, y: 3} + normalizeV: 0 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !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: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 0 +--- !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: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f00000090000000910000009200000093000000940000009500000096000000 + m_AlignBytes: 16 + groupID: 1 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 1 + m_SelfCollisions: 1 + restLength_: 7.7972555 + elements: + - particle1: 0 + particle2: 1 + restLength: 0.1507261 + constraintForce: 0 + tearResistance: 1 + - particle1: 1 + particle2: 2 + restLength: 0.15123467 + constraintForce: 0 + tearResistance: 1 + - particle1: 2 + particle2: 3 + restLength: 0.1509243 + constraintForce: 0 + tearResistance: 1 + - particle1: 3 + particle2: 4 + restLength: 0.15107295 + constraintForce: 0 + tearResistance: 1 + - particle1: 4 + particle2: 5 + restLength: 0.15121686 + constraintForce: 0 + tearResistance: 1 + - particle1: 5 + particle2: 6 + restLength: 0.14650144 + constraintForce: 0 + tearResistance: 1 + - particle1: 6 + particle2: 7 + restLength: 0.1465397 + constraintForce: 0 + tearResistance: 1 + - particle1: 7 + particle2: 8 + restLength: 0.14655413 + constraintForce: 0 + tearResistance: 1 + - particle1: 8 + particle2: 9 + restLength: 0.14655772 + constraintForce: 0 + tearResistance: 1 + - particle1: 9 + particle2: 10 + restLength: 0.14655447 + constraintForce: 0 + tearResistance: 1 + - particle1: 10 + particle2: 11 + restLength: 0.146547 + constraintForce: 0 + tearResistance: 1 + - particle1: 11 + particle2: 12 + restLength: 0.146539 + constraintForce: 0 + tearResistance: 1 + - particle1: 12 + particle2: 13 + restLength: 0.14537738 + constraintForce: 0 + tearResistance: 1 + - particle1: 13 + particle2: 14 + restLength: 0.1453759 + constraintForce: 0 + tearResistance: 1 + - particle1: 14 + particle2: 15 + restLength: 0.1453736 + constraintForce: 0 + tearResistance: 1 + - particle1: 15 + particle2: 16 + restLength: 0.1453681 + constraintForce: 0 + tearResistance: 1 + - particle1: 16 + particle2: 17 + restLength: 0.14536066 + constraintForce: 0 + tearResistance: 1 + - particle1: 17 + particle2: 18 + restLength: 0.14534824 + constraintForce: 0 + tearResistance: 1 + - particle1: 18 + particle2: 19 + restLength: 0.14533304 + constraintForce: 0 + tearResistance: 1 + - particle1: 19 + particle2: 20 + restLength: 0.15357469 + constraintForce: 0 + tearResistance: 1 + - particle1: 20 + particle2: 21 + restLength: 0.15364002 + constraintForce: 0 + tearResistance: 1 + - particle1: 21 + particle2: 22 + restLength: 0.15353157 + constraintForce: 0 + tearResistance: 1 + - particle1: 22 + particle2: 23 + restLength: 0.15287247 + constraintForce: 0 + tearResistance: 1 + - particle1: 23 + particle2: 24 + restLength: 0.16127203 + constraintForce: 0 + tearResistance: 1 + - particle1: 24 + particle2: 25 + restLength: 0.16471474 + constraintForce: 0 + tearResistance: 1 + - particle1: 25 + particle2: 26 + restLength: 0.16590177 + constraintForce: 0 + tearResistance: 1 + - particle1: 26 + particle2: 27 + restLength: 0.16516913 + constraintForce: 0 + tearResistance: 1 + - particle1: 27 + particle2: 28 + restLength: 0.16577673 + constraintForce: 0 + tearResistance: 1 + - particle1: 28 + particle2: 29 + restLength: 0.16574559 + constraintForce: 0 + tearResistance: 1 + - particle1: 29 + particle2: 30 + restLength: 0.16543151 + constraintForce: 0 + tearResistance: 1 + - particle1: 30 + particle2: 31 + restLength: 0.16553983 + constraintForce: 0 + tearResistance: 1 + - particle1: 31 + particle2: 32 + restLength: 0.16564094 + constraintForce: 0 + tearResistance: 1 + - particle1: 32 + particle2: 33 + restLength: 0.16553965 + constraintForce: 0 + tearResistance: 1 + - particle1: 33 + particle2: 34 + restLength: 0.1649676 + constraintForce: 0 + tearResistance: 1 + - particle1: 34 + particle2: 35 + restLength: 0.1661948 + constraintForce: 0 + tearResistance: 1 + - particle1: 35 + particle2: 36 + restLength: 0.164499 + constraintForce: 0 + tearResistance: 1 + - particle1: 36 + particle2: 37 + restLength: 0.16432038 + constraintForce: 0 + tearResistance: 1 + - particle1: 37 + particle2: 38 + restLength: 0.1647215 + constraintForce: 0 + tearResistance: 1 + - particle1: 38 + particle2: 39 + restLength: 0.16523813 + constraintForce: 0 + tearResistance: 1 + - particle1: 39 + particle2: 40 + restLength: 0.16536571 + constraintForce: 0 + tearResistance: 1 + - particle1: 40 + particle2: 41 + restLength: 0.16566478 + constraintForce: 0 + tearResistance: 1 + - particle1: 41 + particle2: 42 + restLength: 0.1656973 + constraintForce: 0 + tearResistance: 1 + - particle1: 42 + particle2: 43 + restLength: 0.16564785 + constraintForce: 0 + tearResistance: 1 + - particle1: 43 + particle2: 44 + restLength: 0.1657586 + constraintForce: 0 + tearResistance: 1 + - particle1: 44 + particle2: 45 + restLength: 0.16586185 + constraintForce: 0 + tearResistance: 1 + - particle1: 45 + particle2: 46 + restLength: 0.1652724 + constraintForce: 0 + tearResistance: 1 + - particle1: 46 + particle2: 47 + restLength: 0.14609504 + constraintForce: 0 + tearResistance: 1 + - particle1: 47 + particle2: 48 + restLength: 0.1464947 + constraintForce: 0 + tearResistance: 1 + - particle1: 48 + particle2: 49 + restLength: 0.14654693 + constraintForce: 0 + tearResistance: 1 + - particle1: 49 + particle2: 50 + 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 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0.1 + _maxBending: 0.01 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &1346965647 +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: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1346965646} + m_Target: {fileID: 1346965650} + m_ParticleGroup: {fileID: 1448059488115486757, guid: d3d21d979f26f472ca2945f4e727239c, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1346965648 +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: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1346965646} + m_Target: {fileID: 1346965650} + m_ParticleGroup: {fileID: 8966044903772103319, guid: d3d21d979f26f472ca2945f4e727239c, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1346965649 +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: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1346965646} + m_Target: {fileID: 1346965650} + m_ParticleGroup: {fileID: -4315519228067560828, guid: d3d21d979f26f472ca2945f4e727239c, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!4 &1346965650 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1346965641} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.649, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 60958072} + m_RootOrder: 9 + 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: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1346965646} + m_Target: {fileID: 1346965650} + m_ParticleGroup: {fileID: 1429558885246807610, guid: d3d21d979f26f472ca2945f4e727239c, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1346965652 +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: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1346965646} + m_Target: {fileID: 1060357570} + m_ParticleGroup: {fileID: 7435677298537737283, guid: d3d21d979f26f472ca2945f4e727239c, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1346965653 +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: 8285ac97113f74d449053378d0e3a56b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_CursorMu: 0.531 + m_SourceMu: 0.741 + direction: 1 +--- !u!114 &1346965654 +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 &1623874905 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1623874906} + - component: {fileID: 1623874909} + - component: {fileID: 1623874908} + - component: {fileID: 1623874907} + m_Layer: 0 + m_Name: Fixpoint (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1623874906 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1623874905} + m_LocalRotation: {x: -0, y: -0, z: -0.3520592, w: 0.93597776} + m_LocalPosition: {x: -0.161, y: 3.581, z: 0} + m_LocalScale: {x: 0.30637, y: 0.10934, z: 0.10934} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 60958072} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -41.227} +--- !u!23 &1623874907 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1623874905} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1623874908 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1623874905} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1623874909 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1623874905} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 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} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.865, z: 0} + m_LocalScale: {x: 0.3, y: 1.7, z: 0.3} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 60958072} + m_RootOrder: 1 + 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_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_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_IsTrigger: 0 + m_Enabled: 1 + 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: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!1 &1647661430 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1647661431} + - component: {fileID: 1647661434} + - component: {fileID: 1647661433} + - component: {fileID: 1647661432} + m_Layer: 0 + m_Name: Fixpoint (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1647661431 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1647661430} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.222, y: 2.013, z: 0} + m_LocalScale: {x: 0.30637, y: 0.10934, z: 0.10934} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 60958072} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1647661432 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1647661430} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1647661433 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1647661430} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1647661434 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1647661430} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1704083320 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1704083325} + - component: {fileID: 1704083324} + - component: {fileID: 1704083323} + - component: {fileID: 1704083322} + - component: {fileID: 1704083321} + - component: {fileID: 1704083326} + - component: {fileID: 1704083327} + - component: {fileID: 1704083328} + m_Layer: 0 + m_Name: pulley + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!54 &1704083321 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1704083320} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!23 &1704083322 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1704083320} + 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: e78e1b735e05b4dee88b279cb6997001, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!136 &1704083323 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1704083320} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5 + m_Height: 7 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1704083324 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1704083320} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1704083325 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1704083320} + m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 1.786, y: 3.414, z: 0} + m_LocalScale: {x: 0.5374203, y: 0.14277229, z: 0.5374205} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1779091963} + - {fileID: 476562059} + m_Father: {fileID: 60958072} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!114 &1704083326 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1704083320} + 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: 1704083323} + m_DistanceField: {fileID: 0} +--- !u!59 &1704083327 +HingeJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1704083320} + m_ConnectedBody: {fileID: 1625299424} + m_ConnectedArticulationBody: {fileID: 0} + m_Anchor: {x: 0, y: 1.0000002, z: 0} + m_Axis: {x: 0, y: 1, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 5.953333, y: 0.91117644, z: -0.4759077} + m_UseSpring: 0 + m_Spring: + spring: 0 + damper: 0 + targetPosition: 0 + m_UseMotor: 0 + m_Motor: + targetVelocity: 0 + force: 0 + freeSpin: 0 + m_UseLimits: 0 + m_Limits: + min: 0 + max: 0 + bounciness: 0 + bounceMinVelocity: 0.2 + contactDistance: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!114 &1704083328 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1704083320} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!1 &1779091962 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1779091963} + - component: {fileID: 1779091966} + - component: {fileID: 1779091965} + - component: {fileID: 1779091964} + - component: {fileID: 1779091967} + m_Layer: 0 + m_Name: side + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1779091963 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1779091962} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -0} + m_LocalScale: {x: 1.327126, y: 0.10883308, z: 1.3271254} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1704083325} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!65 &1779091964 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1779091962} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1.0000001, y: 2.0000005, z: 1.0000006} + m_Center: {x: 0.000000059604645, y: -2.5410988e-21, z: -0.000000089406996} +--- !u!23 &1779091965 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1779091962} + 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: e78e1b735e05b4dee88b279cb6997001, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1779091966 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1779091962} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &1779091967 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1779091962} + 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: 1779091964} + m_DistanceField: {fileID: 0} +--- !u!1 &1929056557 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1929056558} + - component: {fileID: 1929056561} + - component: {fileID: 1929056560} + - component: {fileID: 1929056559} + m_Layer: 0 + m_Name: Base + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1929056558 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1929056557} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.2, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 60958072} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1929056559 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1929056557} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!136 &1929056560 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1929056557} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1929056561 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + 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} + 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: 7 + 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_RootOrder: 0 + 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 diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/Crane.unity.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/Crane.unity.meta new file mode 100644 index 00000000..3d5ddadd --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/Crane.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 440a0ad01189148c4a077885d818dce1 +labels: +- ObiRope +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/ElectricalWires.unity b/xiaofang/Assets/Obi/Samples/RopeAndRod/ElectricalWires.unity new file mode 100644 index 00000000..01e41433 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/ElectricalWires.unity @@ -0,0 +1,2996 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + 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: 1941304692} +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &153317910 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 153317914} + - component: {fileID: 153317913} + - component: {fileID: 153317912} + - component: {fileID: 153317911} + - component: {fileID: 153317915} + m_Layer: 0 + m_Name: Wall2 (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &153317911 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 153317910} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &153317912 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 153317910} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &153317913 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 153317910} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &153317914 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 153317910} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -2.178, y: 2, z: 0} + m_LocalScale: {x: 0.19897103, y: 4, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &153317915 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 153317910} + 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: 153317912} + m_DistanceField: {fileID: 0} +--- !u!1001 &421764872 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + 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_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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + 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 &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_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: 1083562910} + 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 &574933228 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 574933238} + - component: {fileID: 574933229} + - component: {fileID: 574933235} + - component: {fileID: 574933234} + - component: {fileID: 574933233} + - component: {fileID: 574933232} + - component: {fileID: 574933231} + - component: {fileID: 574933230} + - component: {fileID: 574933239} + m_Layer: 10 + m_Name: Obi Rope (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &574933229 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 574933228} + 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_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 0 + particle2: 1 + restLength: 0.18198538 + constraintForce: 0 + tearResistance: 1 + - particle1: 1 + particle2: 2 + restLength: 0.18199486 + constraintForce: 0 + tearResistance: 1 + - particle1: 2 + particle2: 3 + restLength: 0.18258971 + constraintForce: 0 + tearResistance: 1 + - particle1: 3 + particle2: 4 + restLength: 0.1823813 + constraintForce: 0 + tearResistance: 1 + - particle1: 4 + particle2: 5 + restLength: 0.18250579 + constraintForce: 0 + tearResistance: 1 + - particle1: 5 + particle2: 6 + restLength: 0.18252659 + constraintForce: 0 + tearResistance: 1 + - particle1: 6 + particle2: 7 + restLength: 0.18252763 + constraintForce: 0 + tearResistance: 1 + - particle1: 7 + particle2: 8 + restLength: 0.18244386 + constraintForce: 0 + tearResistance: 1 + - particle1: 8 + particle2: 9 + restLength: 0.18238264 + constraintForce: 0 + tearResistance: 1 + - particle1: 9 + particle2: 10 + restLength: 0.18209195 + constraintForce: 0 + tearResistance: 1 + - particle1: 10 + particle2: 11 + 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: 600 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.01 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &574933230 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 574933228} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 574933229} + m_Target: {fileID: 153317914} + m_ParticleGroup: {fileID: 5567824606580605130, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &574933231 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 574933228} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 574933229} + m_Target: {fileID: 1189404435} + m_ParticleGroup: {fileID: 1812756508894959938, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &574933232 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 574933228} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 574933229} + m_Target: {fileID: 153317914} + m_ParticleGroup: {fileID: -2436371210810594525, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &574933233 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 574933228} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 574933229} + m_Target: {fileID: 1189404435} + m_ParticleGroup: {fileID: 1986289758551400005, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &574933234 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 574933228} + 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 &574933235 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 574933228} + 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!4 &574933238 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 574933228} + m_LocalRotation: {x: -0, y: -0, z: -0.0717349, w: 0.99742377} + m_LocalPosition: {x: -1.094, y: 0.88, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2102841797} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -8.227} +--- !u!114 &574933239 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 574933228} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4514513daf5b14cb689daa23e9d8575e, type: 3} + m_Name: + m_EditorClassIdentifier: + prefab: {fileID: 1583403103468830, guid: 46b3b311bc85645d88ddbc56ad5465f2, type: 3} + instanceScale: {x: 1, y: 1, z: 1} + plugTears: 1 + plugStart: 0 + plugEnd: 0 +--- !u!1 &593691592 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 593691593} + - component: {fileID: 593691595} + - component: {fileID: 593691594} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &593691593 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 593691592} + 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: 2064238800} + 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} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &593691594 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 593691592} + 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 &593691595 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 593691592} + 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_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 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} + 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!1 &1083562909 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1083562910} + - component: {fileID: 1083562914} + - component: {fileID: 1083562913} + - component: {fileID: 1083562912} + - component: {fileID: 1083562911} + m_Layer: 5 + m_Name: FPSDisplay + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1083562910 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1083562909} + 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_RootOrder: 0 + 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 &1083562911 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1083562909} + 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 &1083562912 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1083562909} + 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 &1083562913 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1083562909} + 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 &1083562914 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1083562909} + 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: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.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_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1175446146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + 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 &1189404431 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1189404435} + - component: {fileID: 1189404434} + - component: {fileID: 1189404433} + - component: {fileID: 1189404432} + - component: {fileID: 1189404436} + - component: {fileID: 1189404437} + - component: {fileID: 1189404438} + m_Layer: 0 + m_Name: Wall2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1189404432 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1189404431} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1189404433 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1189404431} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1189404434 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1189404431} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1189404435 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1189404431} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 0.19897103, y: 4, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2064238800} + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1189404436 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1189404431} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cbe5860a158ab4ff9852d93167f38e5a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1189404437 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1189404431} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6da1d294c86704f3394415f542741ebe, type: 3} + m_Name: + m_EditorClassIdentifier: + minX: -1 + maxX: 2 + minY: 2 + maxY: 2 + minZ: 0 + maxZ: 0 +--- !u!114 &1189404438 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1189404431} + 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: 1189404433} + m_DistanceField: {fileID: 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: 1346965648} + - component: {fileID: 1346965647} + - component: {fileID: 1346965651} + - component: {fileID: 1346965649} + - component: {fileID: 1346965652} + 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: 700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000a0000000a1000000a2000000a3000000a4000000a5000000a6000000a7000000a8000000a9000000aa000000ab000000ac000000ad000000ae000000af000000b0000000b1000000b2000000b3000000b4000000b5000000b6000000b7000000b8000000b9000000ba000000bb000000bc000000bd000000be000000bf000000c0000000c1000000c2000000c3000000c4000000c5000000c6000000c7000000c8000000c9000000ca000000cb000000cc000000cd000000ce000000cf000000d0000000d1000000d2000000d3000000d4000000d5000000d6000000d7000000d8000000d9000000da000000db000000dc000000dd000000de000000df000000 + m_AlignBytes: 16 + groupID: 2 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 112 + particle2: 113 + restLength: 0.18198538 + constraintForce: 0 + tearResistance: 1 + - particle1: 113 + particle2: 114 + restLength: 0.18199486 + constraintForce: 0 + tearResistance: 1 + - particle1: 114 + particle2: 115 + restLength: 0.18258971 + constraintForce: 0 + tearResistance: 1 + - particle1: 115 + particle2: 116 + restLength: 0.1823813 + constraintForce: 0 + tearResistance: 1 + - particle1: 116 + particle2: 117 + restLength: 0.18250579 + constraintForce: 0 + tearResistance: 1 + - particle1: 117 + particle2: 118 + restLength: 0.18252659 + constraintForce: 0 + tearResistance: 1 + - particle1: 118 + particle2: 119 + restLength: 0.18252763 + constraintForce: 0 + tearResistance: 1 + - particle1: 119 + particle2: 120 + restLength: 0.18244386 + constraintForce: 0 + tearResistance: 1 + - particle1: 120 + particle2: 121 + restLength: 0.18238264 + constraintForce: 0 + tearResistance: 1 + - particle1: 121 + particle2: 122 + restLength: 0.18209195 + constraintForce: 0 + tearResistance: 1 + - particle1: 122 + particle2: 123 + 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 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0 + _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: 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 &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: 1 +--- !u!114 &1346965647 +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: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1346965642} + m_Target: {fileID: 153317914} + m_ParticleGroup: {fileID: -2436371210810594525, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1346965648 +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: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1346965642} + m_Target: {fileID: 1189404435} + m_ParticleGroup: {fileID: 1986289758551400005, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1346965649 +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: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1346965642} + m_Target: {fileID: 153317914} + m_ParticleGroup: {fileID: 5567824606580605130, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!4 &1346965650 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1346965641} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.094, y: 3.65, 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: + 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: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1346965642} + m_Target: {fileID: 1189404435} + m_ParticleGroup: {fileID: 1812756508894959938, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1346965652 +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: 4514513daf5b14cb689daa23e9d8575e, type: 3} + m_Name: + m_EditorClassIdentifier: + prefab: {fileID: 1583403103468830, guid: 46b3b311bc85645d88ddbc56ad5465f2, type: 3} + instanceScale: {x: 1, y: 1, z: 1} + plugTears: 1 + plugStart: 0 + plugEnd: 0 +--- !u!1 &1544324415 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1544324425} + - component: {fileID: 1544324416} + - component: {fileID: 1544324422} + - component: {fileID: 1544324421} + - component: {fileID: 1544324420} + - component: {fileID: 1544324419} + - component: {fileID: 1544324418} + - component: {fileID: 1544324417} + - component: {fileID: 1544324426} + m_Layer: 10 + m_Name: Obi Rope (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1544324416 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1544324415} + 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_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 224 + particle2: 225 + restLength: 0.18198538 + constraintForce: 0 + tearResistance: 1 + - particle1: 225 + particle2: 226 + restLength: 0.18199486 + constraintForce: 0 + tearResistance: 1 + - particle1: 226 + particle2: 227 + restLength: 0.18258971 + constraintForce: 0 + tearResistance: 1 + - particle1: 227 + particle2: 228 + restLength: 0.1823813 + constraintForce: 0 + tearResistance: 1 + - particle1: 228 + particle2: 229 + restLength: 0.18250579 + constraintForce: 0 + tearResistance: 1 + - particle1: 229 + particle2: 230 + restLength: 0.18252659 + constraintForce: 0 + tearResistance: 1 + - particle1: 230 + particle2: 231 + restLength: 0.18252763 + constraintForce: 0 + tearResistance: 1 + - particle1: 231 + particle2: 232 + restLength: 0.18244386 + constraintForce: 0 + tearResistance: 1 + - particle1: 232 + particle2: 233 + restLength: 0.18238264 + constraintForce: 0 + tearResistance: 1 + - particle1: 233 + particle2: 234 + restLength: 0.18209195 + constraintForce: 0 + tearResistance: 1 + - particle1: 234 + particle2: 235 + 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: 530 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &1544324417 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1544324415} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1544324416} + m_Target: {fileID: 153317914} + m_ParticleGroup: {fileID: 5567824606580605130, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1544324418 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1544324415} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1544324416} + m_Target: {fileID: 1189404435} + m_ParticleGroup: {fileID: 1812756508894959938, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1544324419 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1544324415} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1544324416} + m_Target: {fileID: 153317914} + m_ParticleGroup: {fileID: -2436371210810594525, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1544324420 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1544324415} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1544324416} + m_Target: {fileID: 1189404435} + m_ParticleGroup: {fileID: 1986289758551400005, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1544324421 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1544324415} + 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 &1544324422 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1544324415} + 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 &1544324425 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1544324415} + m_LocalRotation: {x: -0, y: -0, z: 0.076309904, w: 0.99708414} + m_LocalPosition: {x: -1.094, y: 1.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2102841797} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 8.753} +--- !u!114 &1544324426 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1544324415} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4514513daf5b14cb689daa23e9d8575e, type: 3} + m_Name: + m_EditorClassIdentifier: + prefab: {fileID: 1583403103468830, guid: 46b3b311bc85645d88ddbc56ad5465f2, type: 3} + instanceScale: {x: 1, y: 1, z: 1} + plugTears: 1 + plugStart: 0 + plugEnd: 0 +--- !u!1 &1634024679 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1634024689} + - component: {fileID: 1634024680} + - component: {fileID: 1634024686} + - component: {fileID: 1634024685} + - component: {fileID: 1634024684} + - component: {fileID: 1634024683} + - component: {fileID: 1634024682} + - component: {fileID: 1634024681} + - component: {fileID: 1634024690} + 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!114 &1634024680 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634024679} + 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_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 336 + particle2: 337 + restLength: 0.18198538 + constraintForce: 0 + tearResistance: 1 + - particle1: 337 + particle2: 338 + restLength: 0.18199486 + constraintForce: 0 + tearResistance: 1 + - particle1: 338 + particle2: 339 + restLength: 0.18258971 + constraintForce: 0 + tearResistance: 1 + - particle1: 339 + particle2: 340 + restLength: 0.1823813 + constraintForce: 0 + tearResistance: 1 + - particle1: 340 + particle2: 341 + restLength: 0.18250579 + constraintForce: 0 + tearResistance: 1 + - particle1: 341 + particle2: 342 + restLength: 0.18252659 + constraintForce: 0 + tearResistance: 1 + - particle1: 342 + particle2: 343 + restLength: 0.18252763 + constraintForce: 0 + tearResistance: 1 + - particle1: 343 + particle2: 344 + restLength: 0.18244386 + constraintForce: 0 + tearResistance: 1 + - particle1: 344 + particle2: 345 + restLength: 0.18238264 + constraintForce: 0 + tearResistance: 1 + - particle1: 345 + particle2: 346 + restLength: 0.18209195 + constraintForce: 0 + tearResistance: 1 + - particle1: 346 + particle2: 347 + 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: 300 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.03 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &1634024681 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634024679} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1634024680} + m_Target: {fileID: 153317914} + m_ParticleGroup: {fileID: 5567824606580605130, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1634024682 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634024679} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1634024680} + m_Target: {fileID: 1189404435} + m_ParticleGroup: {fileID: 1812756508894959938, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1634024683 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634024679} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1634024680} + m_Target: {fileID: 153317914} + m_ParticleGroup: {fileID: -2436371210810594525, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1634024684 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634024679} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1634024680} + m_Target: {fileID: 1189404435} + m_ParticleGroup: {fileID: 1986289758551400005, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1634024685 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634024679} + 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 &1634024686 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634024679} + 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!4 &1634024689 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634024679} + m_LocalRotation: {x: -0, y: -0, z: -0.051464457, w: 0.99867487} + m_LocalPosition: {x: -1.094, y: 2.365, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2102841797} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -5.9} +--- !u!114 &1634024690 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1634024679} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4514513daf5b14cb689daa23e9d8575e, type: 3} + m_Name: + m_EditorClassIdentifier: + prefab: {fileID: 1583403103468830, guid: 46b3b311bc85645d88ddbc56ad5465f2, type: 3} + instanceScale: {x: 1, y: 1, z: 1} + plugTears: 1 + plugStart: 0 + plugEnd: 0 +--- !u!850595691 &1941304692 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Settings.lighting + serializedVersion: 4 + 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_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_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 + m_PVRTiledBaking: 0 +--- !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} + 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 &2025663232 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2025663242} + - component: {fileID: 2025663233} + - component: {fileID: 2025663239} + - component: {fileID: 2025663238} + - component: {fileID: 2025663237} + - component: {fileID: 2025663236} + - component: {fileID: 2025663235} + - component: {fileID: 2025663234} + - component: {fileID: 2025663243} + 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!114 &2025663233 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2025663232} + 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_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 448 + particle2: 449 + restLength: 0.18198538 + constraintForce: 0 + tearResistance: 1 + - particle1: 449 + particle2: 450 + restLength: 0.18199486 + constraintForce: 0 + tearResistance: 1 + - particle1: 450 + particle2: 451 + restLength: 0.18258971 + constraintForce: 0 + tearResistance: 1 + - particle1: 451 + particle2: 452 + restLength: 0.1823813 + constraintForce: 0 + tearResistance: 1 + - particle1: 452 + particle2: 453 + restLength: 0.18250579 + constraintForce: 0 + tearResistance: 1 + - particle1: 453 + particle2: 454 + restLength: 0.18252659 + constraintForce: 0 + tearResistance: 1 + - particle1: 454 + particle2: 455 + restLength: 0.18252763 + constraintForce: 0 + tearResistance: 1 + - particle1: 455 + particle2: 456 + restLength: 0.18244386 + constraintForce: 0 + tearResistance: 1 + - particle1: 456 + particle2: 457 + restLength: 0.18238264 + constraintForce: 0 + tearResistance: 1 + - particle1: 457 + particle2: 458 + restLength: 0.18209195 + constraintForce: 0 + tearResistance: 1 + - particle1: 458 + particle2: 459 + 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: 400 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.02 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &2025663234 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2025663232} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 2025663233} + m_Target: {fileID: 153317914} + m_ParticleGroup: {fileID: 5567824606580605130, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &2025663235 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2025663232} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 2025663233} + m_Target: {fileID: 1189404435} + m_ParticleGroup: {fileID: 1812756508894959938, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &2025663236 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2025663232} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 2025663233} + m_Target: {fileID: 153317914} + m_ParticleGroup: {fileID: -2436371210810594525, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &2025663237 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2025663232} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 2025663233} + m_Target: {fileID: 1189404435} + m_ParticleGroup: {fileID: 1986289758551400005, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &2025663238 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2025663232} + 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 &2025663239 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2025663232} + 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!4 &2025663242 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2025663232} + m_LocalRotation: {x: -0, y: -0, z: -0.05311633, w: 0.9985884} + m_LocalPosition: {x: -1.094, y: 3.288, z: 0} + 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: -6.09} +--- !u!114 &2025663243 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2025663232} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4514513daf5b14cb689daa23e9d8575e, type: 3} + m_Name: + m_EditorClassIdentifier: + prefab: {fileID: 1583403103468830, guid: 46b3b311bc85645d88ddbc56ad5465f2, type: 3} + instanceScale: {x: 1, y: 1, z: 1} + plugTears: 1 + plugStart: 0 + plugEnd: 0 +--- !u!1 &2060423109 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2060423119} + - component: {fileID: 2060423110} + - component: {fileID: 2060423116} + - component: {fileID: 2060423115} + - component: {fileID: 2060423114} + - component: {fileID: 2060423113} + - component: {fileID: 2060423112} + - component: {fileID: 2060423111} + - component: {fileID: 2060423120} + 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!114 &2060423110 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060423109} + 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_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 560 + particle2: 561 + restLength: 0.18198538 + constraintForce: 0 + tearResistance: 1 + - particle1: 561 + particle2: 562 + restLength: 0.18199486 + constraintForce: 0 + tearResistance: 1 + - particle1: 562 + particle2: 563 + restLength: 0.18258971 + constraintForce: 0 + tearResistance: 1 + - particle1: 563 + particle2: 564 + restLength: 0.1823813 + constraintForce: 0 + tearResistance: 1 + - particle1: 564 + particle2: 565 + restLength: 0.18250579 + constraintForce: 0 + tearResistance: 1 + - particle1: 565 + particle2: 566 + restLength: 0.18252659 + constraintForce: 0 + tearResistance: 1 + - particle1: 566 + particle2: 567 + restLength: 0.18252763 + constraintForce: 0 + tearResistance: 1 + - particle1: 567 + particle2: 568 + restLength: 0.18244386 + constraintForce: 0 + tearResistance: 1 + - particle1: 568 + particle2: 569 + restLength: 0.18238264 + constraintForce: 0 + tearResistance: 1 + - particle1: 569 + particle2: 570 + restLength: 0.18209195 + constraintForce: 0 + tearResistance: 1 + - particle1: 570 + particle2: 571 + 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: 580 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.01 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &2060423111 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060423109} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 2060423110} + m_Target: {fileID: 153317914} + m_ParticleGroup: {fileID: 5567824606580605130, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &2060423112 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060423109} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 2060423110} + m_Target: {fileID: 1189404435} + m_ParticleGroup: {fileID: 1812756508894959938, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &2060423113 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060423109} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 2060423110} + m_Target: {fileID: 153317914} + m_ParticleGroup: {fileID: -2436371210810594525, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &2060423114 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060423109} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 2060423110} + m_Target: {fileID: 1189404435} + m_ParticleGroup: {fileID: 1986289758551400005, guid: 61d053dd5abd943919947f833abd0569, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &2060423115 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060423109} + 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 &2060423116 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060423109} + 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!4 &2060423119 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060423109} + m_LocalRotation: {x: -0, y: -0, z: 0.080383524, w: 0.996764} + m_LocalPosition: {x: -1.094, y: 2.803, z: 0} + 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: 0, z: 9.221001} +--- !u!114 &2060423120 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060423109} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4514513daf5b14cb689daa23e9d8575e, type: 3} + m_Name: + m_EditorClassIdentifier: + prefab: {fileID: 1583403103468830, guid: 46b3b311bc85645d88ddbc56ad5465f2, type: 3} + instanceScale: {x: 1, y: 1, z: 1} + plugTears: 1 + plugStart: 0 + plugEnd: 0 +--- !u!1 &2064238796 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2064238800} + - component: {fileID: 2064238799} + - component: {fileID: 2064238798} + - component: {fileID: 2064238797} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2064238797 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2064238796} + 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 &2064238798 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2064238796} + 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 &2064238799 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2064238796} + 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_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &2064238800 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2064238796} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.049989406, y: 0.00248661, z: 0.00994644} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 593691593} + m_Father: {fileID: 1189404435} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 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} + 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 &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: 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 + colliderCCD: 1 + particleCCD: 0 + shockPropagation: 0 + surfaceCollisionIterations: 8 + surfaceCollisionTolerance: 0.005 + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + maxFoamVelocityStretch: 0.3 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + worldLinearInertiaScale: 0 + worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 + distanceConstraintParameters: + evaluationOrder: 0 + iterations: 8 + SORFactor: 1 + enabled: 1 + bendingConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 1 + particleCollisionConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 1 + particleFrictionConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 1 + collisionConstraintParameters: + evaluationOrder: 1 + iterations: 4 + SORFactor: 1 + enabled: 1 + frictionConstraintParameters: + evaluationOrder: 1 + iterations: 3 + 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 + 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: 1 + bendTwistConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 1 + 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} + 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: 2025663242} + - {fileID: 2060423119} + - {fileID: 1634024689} + - {fileID: 1544324425} + - {fileID: 574933238} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/ElectricalWires.unity.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/ElectricalWires.unity.meta new file mode 100644 index 00000000..c8b9df48 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/ElectricalWires.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1ca589942e43e4cd6ac9a4f096ded02a +labels: +- ObiRope +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/Firehose.unity b/xiaofang/Assets/Obi/Samples/RopeAndRod/Firehose.unity new file mode 100644 index 00000000..0eac245a --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/Firehose.unity @@ -0,0 +1,6334 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + 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: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &415326630 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + 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} + 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!1001 &421764872 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + 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_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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + 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_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_RootOrder: 5 + 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 &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_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 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} + 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!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_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 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 hose to manipulate it. +--- !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 &1165207593 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1165207597} + - component: {fileID: 1165207596} + - component: {fileID: 1165207595} + - component: {fileID: 1165207594} + - component: {fileID: 1165207598} + m_Layer: 0 + m_Name: Capsule + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!136 &1165207594 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165207593} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1165207595 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165207593} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1165207596 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165207593} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1165207597 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165207593} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -2.5, 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!114 &1165207598 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165207593} + 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: 1165207594} + m_DistanceField: {fileID: 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: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.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_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1175446146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + 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 &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: 1346965647} + - component: {fileID: 1346965649} + - component: {fileID: 1346965648} + - 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: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000250000002600000027000000 + m_AlignBytes: 16 + groupID: 1 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + 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 &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: 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 &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: 0 +--- !u!114 &1346965647 +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: d71cdcf242c9b44fb874af7b7d8fd2b9, type: 3} + m_Name: + m_EditorClassIdentifier: + pumpSpeed: 5 + bulgeFrequency: 3 + baseThickness: 0.075 + bulgeThickness: 0.15 + bulgeColor: {r: 0, g: 0.50424004, b: 0.6698113, a: 1} + waterEmitter: {fileID: 1396980387} + flowSpeedMin: 1 + flowSpeedMax: 7 + minEmitRate: 50 + maxEmitRate: 1000 + smoother: {fileID: 1346965646} +--- !u!114 &1346965648 +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: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1346965642} + m_Target: {fileID: 1165207597} + m_ParticleGroup: {fileID: 5505919189061892379, guid: b2fe09b5a1ae2424597b4776dc36fa5c, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1346965649 +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: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1346965642} + m_Target: {fileID: 1165207597} + m_ParticleGroup: {fileID: -2867197770825267649, guid: b2fe09b5a1ae2424597b4776dc36fa5c, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!4 &1346965650 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1346965641} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.46, y: 0.27, 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: + 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 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1396980388} + - component: {fileID: 1396980387} + - component: {fileID: 1396980386} + m_Layer: 0 + m_Name: Particle System + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!199 &1396980386 +ParticleSystemRenderer: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1396980384} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10308, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_RenderMode: 0 + m_MeshDistribution: 0 + m_SortMode: 0 + m_MinParticleSize: 0 + m_MaxParticleSize: 0.5 + m_CameraVelocityScale: 1 + m_VelocityScale: 0.025 + m_LengthScale: 0.2 + m_SortingFudge: 0 + m_NormalDirection: 1 + m_ShadowBias: 0 + m_RenderAlignment: 0 + m_Pivot: {x: 0, y: 0, z: 0} + m_Flip: {x: 0, y: 0, z: 0} + m_UseCustomVertexStreams: 0 + m_EnableGPUInstancing: 1 + m_ApplyActiveColorSpace: 1 + m_AllowRoll: 1 + m_FreeformStretching: 0 + m_RotateWithStretchDirection: 1 + m_VertexStreams: 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 +--- !u!198 &1396980387 +ParticleSystem: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1396980384} + serializedVersion: 8 + lengthInSec: 5 + simulationSpeed: 1 + stopAction: 0 + cullingMode: 0 + ringBufferMode: 0 + ringBufferLoopRange: {x: 0, y: 1} + emitterVelocityMode: 1 + looping: 1 + prewarm: 0 + playOnAwake: 1 + useUnscaledTime: 0 + autoRandomSeed: 1 + startDelay: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + moveWithTransform: 1 + moveWithCustomTransform: {fileID: 0} + scalingMode: 1 + randomSeed: 0 + InitialModule: + serializedVersion: 3 + enabled: 1 + startLifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 3 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 5 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startColor: + serializedVersion: 2 + minMaxState: 2 + minColor: {r: 0.114542544, g: 0.50326735, b: 0.735849, a: 1} + maxColor: {r: 0.2460395, g: 0.76591134, b: 0.9150943, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + startSize: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.15 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotation: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + randomizeRotationDirection: 0 + maxNumParticles: 80000 + customEmitterVelocity: {x: 0, y: 0, z: 0} + size3D: 0 + rotation3D: 0 + gravityModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ShapeModule: + serializedVersion: 6 + enabled: 1 + type: 4 + angle: 10 + length: 5 + boxThickness: {x: 0, y: 0, z: 0} + radiusThickness: 1 + donutRadius: 0.2 + m_Position: {x: 0, y: 0, z: 0} + m_Rotation: {x: 0, y: 0, z: 0} + m_Scale: {x: 1, y: 1, z: 1} + placementMode: 0 + m_MeshMaterialIndex: 0 + m_MeshNormalOffset: 0 + m_MeshSpawn: + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Mesh: {fileID: 0} + m_MeshRenderer: {fileID: 0} + m_SkinnedMeshRenderer: {fileID: 0} + m_Sprite: {fileID: 0} + m_SpriteRenderer: {fileID: 0} + m_UseMeshMaterialIndex: 0 + m_UseMeshColors: 1 + alignToDirection: 0 + m_Texture: {fileID: 0} + m_TextureClipChannel: 3 + m_TextureClipThreshold: 0 + m_TextureUVChannel: 0 + m_TextureColorAffectsParticles: 1 + m_TextureAlphaAffectsParticles: 1 + m_TextureBilinearFiltering: 0 + randomDirectionAmount: 0 + sphericalDirectionAmount: 0 + randomPositionAmount: 0 + radius: + value: 0.05 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + arc: + value: 360 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + EmissionModule: + enabled: 1 + serializedVersion: 4 + rateOverTime: + serializedVersion: 2 + minMaxState: 0 + scalar: 1000 + minScalar: 10 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rateOverDistance: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BurstCount: 0 + m_Bursts: [] + SizeModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + RotationModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + ColorModule: + enabled: 1 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 32768 + atime2: 65535 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 3 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + UVModule: + serializedVersion: 2 + enabled: 0 + mode: 0 + timeMode: 0 + fps: 30 + frameOverTime: + serializedVersion: 2 + minMaxState: 1 + scalar: 0.9999 + minScalar: 0.9999 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startFrame: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedRange: {x: 0, y: 1} + tilesX: 1 + tilesY: 1 + animationType: 0 + rowIndex: 0 + cycles: 1 + uvChannelMask: -1 + rowMode: 1 + sprites: + - sprite: {fileID: 0} + flipU: 0 + flipV: 0 + VelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + radial: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + InheritVelocityModule: + enabled: 0 + m_Mode: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LifetimeByEmitterSpeedModule: + enabled: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: -0.8 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0.2 + inSlope: -0.8 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Range: {x: 0, y: 1} + ForceModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + randomizePerFrame: 0 + ExternalForcesModule: + serializedVersion: 2 + enabled: 0 + multiplierCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + influenceFilter: 0 + influenceMask: + serializedVersion: 2 + m_Bits: 4294967295 + influenceList: [] + ClampVelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + magnitude: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxis: 0 + inWorldSpace: 0 + multiplyDragByParticleSize: 1 + multiplyDragByParticleVelocity: 1 + dampen: 0 + drag: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + NoiseModule: + enabled: 0 + strength: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + frequency: 0.5 + damping: 1 + octaves: 1 + octaveMultiplier: 0.5 + octaveScale: 2 + quality: 2 + scrollSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remap: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapY: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapZ: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapEnabled: 0 + positionAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rotationAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + sizeAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + SizeBySpeedModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + range: {x: 0, y: 1} + separateAxes: 0 + RotationBySpeedModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + range: {x: 0, y: 1} + ColorBySpeedModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + range: {x: 0, y: 1} + CollisionModule: + enabled: 1 + serializedVersion: 4 + type: 1 + collisionMode: 0 + colliderForce: 0 + multiplyColliderForceByParticleSize: 0 + multiplyColliderForceByParticleSpeed: 0 + multiplyColliderForceByCollisionAngle: 1 + m_Planes: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + m_Dampen: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.1 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Bounce: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_EnergyLossOnCollision: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.05 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minKillSpeed: 0 + maxKillSpeed: 10000 + radiusScale: 1 + collidesWith: + serializedVersion: 2 + m_Bits: 4294967295 + maxCollisionShapes: 256 + quality: 0 + voxelSize: 0.5 + collisionMessages: 0 + collidesWithDynamic: 1 + interiorCollisions: 0 + TriggerModule: + enabled: 0 + serializedVersion: 2 + inside: 1 + outside: 0 + enter: 0 + exit: 0 + colliderQueryMode: 0 + radiusScale: 1 + primitives: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + SubModule: + serializedVersion: 2 + enabled: 0 + subEmitters: + - serializedVersion: 3 + emitter: {fileID: 0} + type: 0 + properties: 0 + emitProbability: 1 + LightsModule: + enabled: 0 + ratio: 0 + light: {fileID: 0} + randomDistribution: 1 + color: 1 + range: 1 + intensity: 1 + rangeCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + intensityCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + maxLights: 20 + TrailModule: + enabled: 0 + mode: 0 + ratio: 1 + lifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minVertexDistance: 0.2 + textureMode: 0 + ribbonCount: 1 + shadowBias: 0.5 + worldSpace: 0 + dieWithParticles: 1 + sizeAffectsWidth: 1 + sizeAffectsLifetime: 0 + inheritParticleColor: 1 + generateLightingData: 0 + splitSubEmitterRibbons: 0 + attachRibbonsToTransform: 0 + colorOverLifetime: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + widthOverTrail: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorOverTrail: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + CustomDataModule: + enabled: 0 + mode0: 0 + vectorComponentCount0: 4 + color0: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel0: Color + vector0_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_0: X + vector0_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_1: Y + vector0_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_2: Z + vector0_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_3: W + mode1: 0 + vectorComponentCount1: 4 + color1: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel1: Color + vector1_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_0: X + vector1_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_1: Y + vector1_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_2: Z + vector1_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_3: W +--- !u!4 &1396980388 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1396980384} + m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + m_LocalPosition: {x: 3.51, y: 0.291, z: -0.02} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !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} + 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 &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} + 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: 0 + shockPropagation: 0 + surfaceCollisionIterations: 8 + surfaceCollisionTolerance: 0.005 + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + maxFoamVelocityStretch: 0.3 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + 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 + 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} + 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!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: + 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_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_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_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + shadowBias: 0.5 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/Firehose.unity.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/Firehose.unity.meta new file mode 100644 index 00000000..c60811ff --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/Firehose.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 433676b596d32485f82785463d0e0837 +labels: +- ObiRope +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/FirehoseSettings.lighting b/xiaofang/Assets/Obi/Samples/RopeAndRod/FirehoseSettings.lighting new file mode 100644 index 00000000..1e2949e8 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/FirehoseSettings.lighting @@ -0,0 +1,64 @@ +%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: FirehoseSettings + serializedVersion: 4 + 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_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_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 + m_PVRTiledBaking: 0 diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/FirehoseSettings.lighting.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/FirehoseSettings.lighting.meta new file mode 100644 index 00000000..30d387ea --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/FirehoseSettings.lighting.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cfd0a31533ca84d319eb2d45c71f457d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4890085278179872738 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/FreightLift.unity b/xiaofang/Assets/Obi/Samples/RopeAndRod/FreightLift.unity new file mode 100644 index 00000000..d750a61e --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/FreightLift.unity @@ -0,0 +1,2619 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + 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: 1093393307} +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &99547752 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 99547753} + - component: {fileID: 99547757} + - component: {fileID: 99547756} + - component: {fileID: 99547755} + - component: {fileID: 99547754} + - component: {fileID: 99547759} + - component: {fileID: 99547758} + m_Layer: 0 + m_Name: Load (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &99547753 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 99547752} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2.6399999, z: 0} + m_LocalScale: {x: 0.39999998, y: 0.39999998, z: 0.39999998} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &99547754 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 99547752} + serializedVersion: 2 + m_Mass: 0.5 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!23 &99547755 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 99547752} + 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: e78e1b735e05b4dee88b279cb6997001, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &99547756 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 99547752} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &99547757 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 99547752} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &99547758 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 99547752} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!114 &99547759 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 99547752} + 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: 99547756} + m_DistanceField: {fileID: 0} +--- !u!1 &254982891 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 254982895} + - component: {fileID: 254982894} + - component: {fileID: 254982893} + - component: {fileID: 254982892} + - component: {fileID: 254982896} + - component: {fileID: 254982898} + - component: {fileID: 254982897} + m_Layer: 0 + m_Name: Platform + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &254982892 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 254982891} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &254982893 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 254982891} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &254982894 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 254982891} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &254982895 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 254982891} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.8399999, z: 0} + m_LocalScale: {x: 2.1, y: 0.1, z: 2.1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &254982896 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 254982891} + serializedVersion: 2 + m_Mass: 4 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!114 &254982897 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 254982891} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!114 &254982898 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 254982891} + 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: 254982893} + m_DistanceField: {fileID: 0} +--- !u!1001 &421764872 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + 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_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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + 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: 11400000, guid: 5eb5ff1af3a3f4a14977448198c232ae, type: 2} +--- !u!1 &522272186 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 522272187} + - component: {fileID: 522272191} + - component: {fileID: 522272190} + - component: {fileID: 522272189} + - component: {fileID: 522272188} + - component: {fileID: 522272193} + - component: {fileID: 522272192} + m_Layer: 0 + m_Name: Load (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &522272187 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 522272186} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.25, y: 2.191, z: 0} + m_LocalScale: {x: 0.39999998, y: 0.39999998, z: 0.39999998} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!54 &522272188 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 522272186} + serializedVersion: 2 + m_Mass: 0.5 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!23 &522272189 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 522272186} + 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: e78e1b735e05b4dee88b279cb6997001, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &522272190 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 522272186} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &522272191 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 522272186} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &522272192 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 522272186} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!114 &522272193 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 522272186} + 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: 522272190} + m_DistanceField: {fileID: 0} +--- !u!1 &597266340 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 597266341} + - component: {fileID: 597266344} + - component: {fileID: 597266343} + - component: {fileID: 597266342} + - component: {fileID: 597266345} + - component: {fileID: 597266346} + - component: {fileID: 597266347} + - component: {fileID: 597266348} + 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 &597266341 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 597266340} + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + 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_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &597266342 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 597266340} + 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: 0 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &597266343 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 597266340} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0.02 + smoothing: 0 + twist: 0 + indexInSystem: 0 +--- !u!114 &597266344 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 597266340} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000 + m_AlignBytes: 16 + groupID: 1 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_SelfCollisions: 1 + restLength_: 2.000002 + elements: + - particle1: 0 + particle2: 1 + restLength: 0.11670005 + constraintForce: 0 + tearResistance: 1 + - particle1: 1 + particle2: 2 + restLength: 0.11680669 + constraintForce: 0 + tearResistance: 1 + - particle1: 2 + particle2: 3 + restLength: 0.11829093 + constraintForce: 0 + tearResistance: 1 + - particle1: 3 + particle2: 4 + restLength: 0.117395446 + constraintForce: 0 + tearResistance: 1 + - particle1: 4 + particle2: 5 + restLength: 0.11783301 + constraintForce: 0 + tearResistance: 1 + - particle1: 5 + particle2: 6 + restLength: 0.11791115 + constraintForce: 0 + tearResistance: 1 + - particle1: 6 + particle2: 7 + restLength: 0.1178735 + constraintForce: 0 + tearResistance: 1 + - particle1: 7 + particle2: 8 + restLength: 0.117807046 + constraintForce: 0 + tearResistance: 1 + - particle1: 8 + particle2: 9 + restLength: 0.11774122 + constraintForce: 0 + tearResistance: 1 + - particle1: 9 + particle2: 10 + restLength: 0.11778654 + constraintForce: 0 + tearResistance: 1 + - particle1: 10 + particle2: 11 + restLength: 0.117860526 + constraintForce: 0 + tearResistance: 1 + - particle1: 11 + particle2: 12 + restLength: 0.11791558 + constraintForce: 0 + tearResistance: 1 + - particle1: 12 + particle2: 13 + restLength: 0.11788291 + constraintForce: 0 + tearResistance: 1 + - particle1: 13 + particle2: 14 + restLength: 0.11756081 + constraintForce: 0 + tearResistance: 1 + - particle1: 14 + particle2: 15 + restLength: 0.11787611 + constraintForce: 0 + tearResistance: 1 + - particle1: 15 + particle2: 16 + restLength: 0.11770154 + constraintForce: 0 + tearResistance: 1 + - particle1: 16 + particle2: 17 + 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 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.05 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &597266345 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 597266340} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 597266344} + m_Target: {fileID: 597266341} + m_ParticleGroup: {fileID: 1119723573710947368, guid: df057526865004da9ac53f3c8bc43d9f, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &597266346 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 597266340} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 597266344} + m_Target: {fileID: 254982895} + m_ParticleGroup: {fileID: 1023878380947534591, guid: df057526865004da9ac53f3c8bc43d9f, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &597266347 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 597266340} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83c7e82b3aac04e408bc8bfe9027c983, type: 3} + m_Name: + m_EditorClassIdentifier: + minLength: 0.1 + speed: 1 +--- !u!114 &597266348 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 597266340} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8285ac97113f74d449053378d0e3a56b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_CursorMu: 0.95 + m_SourceMu: 0.95 + direction: 0 +--- !u!1 &849349590 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 849349591} + - component: {fileID: 849349593} + - component: {fileID: 849349592} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &849349591 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 849349590} + 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: 897006173} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 100.29999, y: 24.400024} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &849349592 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 849349590} + 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,A,S,D to control the lift. +--- !u!222 &849349593 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 849349590} + m_CullTransparentMesh: 0 +--- !u!1 &865561429 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 865561430} + - component: {fileID: 865561433} + - component: {fileID: 865561432} + - component: {fileID: 865561431} + - component: {fileID: 865561434} + - component: {fileID: 865561436} + - component: {fileID: 865561435} + m_Layer: 0 + m_Name: Load + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &865561430 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 865561429} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.25, y: 2.191, z: 0} + m_LocalScale: {x: 0.4, y: 0.4, z: 0.4} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &865561431 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 865561429} + 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: e78e1b735e05b4dee88b279cb6997001, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &865561432 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 865561429} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &865561433 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 865561429} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!54 &865561434 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 865561429} + serializedVersion: 2 + m_Mass: 0.5 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!114 &865561435 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 865561429} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!114 &865561436 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 865561429} + 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: 865561432} + m_DistanceField: {fileID: 0} +--- !u!1 &897006169 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 897006173} + - component: {fileID: 897006172} + - component: {fileID: 897006171} + - component: {fileID: 897006170} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &897006170 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 897006169} + 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 &897006171 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 897006169} + 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 &897006172 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 897006169} + 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_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &897006173 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 897006169} + 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: 849349591} + 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 &977238586 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 977238587} + - component: {fileID: 977238590} + - component: {fileID: 977238589} + - component: {fileID: 977238588} + - component: {fileID: 977238591} + - component: {fileID: 977238592} + - component: {fileID: 977238593} + - component: {fileID: 977238595} + - component: {fileID: 977238594} + 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 &977238587 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 977238586} + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + 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_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &977238588 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 977238586} + 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: 0 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &977238589 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 977238586} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0.02 + smoothing: 0 + twist: 0 + indexInSystem: 1 +--- !u!114 &977238590 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 977238586} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000a0000000a1000000a2000000a3000000a4000000a5000000a6000000a7000000a8000000a9000000aa000000ab000000ac000000ad000000ae000000af000000b0000000b1000000b2000000b3000000b4000000b5000000b6000000b7000000b8000000b9000000ba000000bb000000bc000000bd000000be000000bf000000c0000000c1000000c2000000c3000000c4000000c5000000c6000000c7000000c8000000c9000000ca000000cb000000cc000000cd000000ce000000cf000000d0000000d1000000d2000000d3000000d4000000d5000000d6000000d7000000d8000000d9000000da000000db000000dc000000dd000000de000000df000000e0000000e1000000e2000000e3000000e4000000e5000000e6000000e7000000e8000000e9000000ea000000eb000000 + m_AlignBytes: 16 + groupID: 2 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_SelfCollisions: 1 + restLength_: 2.000002 + elements: + - particle1: 118 + particle2: 119 + restLength: 0.11670005 + constraintForce: 0 + tearResistance: 1 + - particle1: 119 + particle2: 120 + restLength: 0.11680669 + constraintForce: 0 + tearResistance: 1 + - particle1: 120 + particle2: 121 + restLength: 0.11829093 + constraintForce: 0 + tearResistance: 1 + - particle1: 121 + particle2: 122 + restLength: 0.117395446 + constraintForce: 0 + tearResistance: 1 + - particle1: 122 + particle2: 123 + restLength: 0.11783301 + constraintForce: 0 + tearResistance: 1 + - particle1: 123 + particle2: 124 + restLength: 0.11791115 + constraintForce: 0 + tearResistance: 1 + - particle1: 124 + particle2: 125 + restLength: 0.1178735 + constraintForce: 0 + tearResistance: 1 + - particle1: 125 + particle2: 126 + restLength: 0.117807046 + constraintForce: 0 + tearResistance: 1 + - particle1: 126 + particle2: 127 + restLength: 0.11774122 + constraintForce: 0 + tearResistance: 1 + - particle1: 127 + particle2: 128 + restLength: 0.11778654 + constraintForce: 0 + tearResistance: 1 + - particle1: 128 + particle2: 129 + restLength: 0.117860526 + constraintForce: 0 + tearResistance: 1 + - particle1: 129 + particle2: 130 + restLength: 0.11791558 + constraintForce: 0 + tearResistance: 1 + - particle1: 130 + particle2: 131 + restLength: 0.11788291 + constraintForce: 0 + tearResistance: 1 + - particle1: 131 + particle2: 132 + restLength: 0.11756081 + constraintForce: 0 + tearResistance: 1 + - particle1: 132 + particle2: 133 + restLength: 0.11787611 + constraintForce: 0 + tearResistance: 1 + - particle1: 133 + particle2: 134 + restLength: 0.11770154 + constraintForce: 0 + tearResistance: 1 + - particle1: 134 + particle2: 135 + 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 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.05 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &977238591 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 977238586} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 977238590} + m_Target: {fileID: 977238587} + m_ParticleGroup: {fileID: 1119723573710947368, guid: df057526865004da9ac53f3c8bc43d9f, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &977238592 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 977238586} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 977238590} + m_Target: {fileID: 254982895} + m_ParticleGroup: {fileID: 1023878380947534591, guid: df057526865004da9ac53f3c8bc43d9f, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &977238593 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 977238586} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83c7e82b3aac04e408bc8bfe9027c983, type: 3} + m_Name: + m_EditorClassIdentifier: + minLength: 0.1 + speed: 1 +--- !u!114 &977238594 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 977238586} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8285ac97113f74d449053378d0e3a56b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_CursorMu: 0.95 + m_SourceMu: 0.95 + direction: 0 +--- !u!114 &977238595 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 977238586} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c8b45ebbf86be4df6b0e6cd933812af2, type: 3} + m_Name: + m_EditorClassIdentifier: + 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 + 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_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 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} + 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!1 &1007350292 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1007350293} + m_Layer: 0 + m_Name: Lift + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1007350293 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1007350292} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2091522317} + - {fileID: 597266341} + - {fileID: 1398407820} + - {fileID: 977238587} + m_Father: {fileID: 2102841797} + m_RootOrder: 0 + 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: 4 + 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_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_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 + m_PVRTiledBaking: 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: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.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_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1175446146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + 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 &1398407819 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1398407820} + - component: {fileID: 1398407823} + - component: {fileID: 1398407822} + - component: {fileID: 1398407821} + - component: {fileID: 1398407824} + - component: {fileID: 1398407825} + - component: {fileID: 1398407826} + - component: {fileID: 1398407828} + - component: {fileID: 1398407827} + 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 &1398407820 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1398407819} + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + 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_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &1398407821 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1398407819} + 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: 0 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &1398407822 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1398407819} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0.02 + smoothing: 0 + twist: 0 + indexInSystem: 2 +--- !u!114 &1398407823 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1398407819} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: ec000000ed000000ee000000ef000000f0000000f1000000f2000000f3000000f4000000f5000000f6000000f7000000f8000000f9000000fa000000fb000000fc000000fd000000fe000000ff000000000100000101000002010000030100000401000005010000060100000701000008010000090100000a0100000b0100000c0100000d0100000e0100000f010000100100001101000012010000130100001401000015010000160100001701000018010000190100001a0100001b0100001c0100001d0100001e0100001f010000200100002101000022010000230100002401000025010000260100002701000028010000290100002a0100002b0100002c0100002d0100002e0100002f010000300100003101000032010000330100003401000035010000360100003701000038010000390100003a0100003b0100003c0100003d0100003e0100003f010000400100004101000042010000430100004401000045010000460100004701000048010000490100004a0100004b0100004c0100004d0100004e0100004f010000500100005101000052010000530100005401000055010000560100005701000058010000590100005a0100005b0100005c0100005d0100005e0100005f0100006001000061010000 + m_AlignBytes: 16 + groupID: 3 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_SelfCollisions: 1 + restLength_: 2.000002 + elements: + - particle1: 236 + particle2: 237 + restLength: 0.11670005 + constraintForce: 0 + tearResistance: 1 + - particle1: 237 + particle2: 238 + restLength: 0.11680669 + constraintForce: 0 + tearResistance: 1 + - particle1: 238 + particle2: 239 + restLength: 0.11829093 + constraintForce: 0 + tearResistance: 1 + - particle1: 239 + particle2: 240 + restLength: 0.117395446 + constraintForce: 0 + tearResistance: 1 + - particle1: 240 + particle2: 241 + restLength: 0.11783301 + constraintForce: 0 + tearResistance: 1 + - particle1: 241 + particle2: 242 + restLength: 0.11791115 + constraintForce: 0 + tearResistance: 1 + - particle1: 242 + particle2: 243 + restLength: 0.1178735 + constraintForce: 0 + tearResistance: 1 + - particle1: 243 + particle2: 244 + restLength: 0.117807046 + constraintForce: 0 + tearResistance: 1 + - particle1: 244 + particle2: 245 + restLength: 0.11774122 + constraintForce: 0 + tearResistance: 1 + - particle1: 245 + particle2: 246 + restLength: 0.11778654 + constraintForce: 0 + tearResistance: 1 + - particle1: 246 + particle2: 247 + restLength: 0.117860526 + constraintForce: 0 + tearResistance: 1 + - particle1: 247 + particle2: 248 + restLength: 0.11791558 + constraintForce: 0 + tearResistance: 1 + - particle1: 248 + particle2: 249 + restLength: 0.11788291 + constraintForce: 0 + tearResistance: 1 + - particle1: 249 + particle2: 250 + restLength: 0.11756081 + constraintForce: 0 + tearResistance: 1 + - particle1: 250 + particle2: 251 + restLength: 0.11787611 + constraintForce: 0 + tearResistance: 1 + - particle1: 251 + particle2: 252 + restLength: 0.11770154 + constraintForce: 0 + tearResistance: 1 + - particle1: 252 + particle2: 253 + 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 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.05 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &1398407824 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1398407819} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1398407823} + m_Target: {fileID: 1398407820} + m_ParticleGroup: {fileID: 1119723573710947368, guid: df057526865004da9ac53f3c8bc43d9f, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1398407825 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1398407819} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1398407823} + m_Target: {fileID: 254982895} + m_ParticleGroup: {fileID: 1023878380947534591, guid: df057526865004da9ac53f3c8bc43d9f, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1398407826 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1398407819} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83c7e82b3aac04e408bc8bfe9027c983, type: 3} + m_Name: + m_EditorClassIdentifier: + minLength: 0.1 + speed: 1 +--- !u!114 &1398407827 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1398407819} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8285ac97113f74d449053378d0e3a56b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_CursorMu: 0.95 + m_SourceMu: 0.95 + direction: 0 +--- !u!114 &1398407828 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1398407819} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c8b45ebbf86be4df6b0e6cd933812af2, type: 3} + m_Name: + m_EditorClassIdentifier: + 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} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1834593284} + - component: {fileID: 1834593283} + m_Layer: 0 + m_Name: BurstCollisionWorld + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1834593283 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1834593282} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} + m_Name: + m_EditorClassIdentifier: + cellSpans: + m_AlignBytes: 16 +--- !u!4 &1834593284 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1834593282} + 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 &2091522316 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2091522317} + - component: {fileID: 2091522320} + - component: {fileID: 2091522319} + - component: {fileID: 2091522318} + - component: {fileID: 2091522321} + - component: {fileID: 2091522322} + - component: {fileID: 2091522325} + - component: {fileID: 2091522327} + - component: {fileID: 2091522326} + 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 &2091522317 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091522316} + m_LocalRotation: {x: 0, y: 0, z: 0.7071068, w: 0.7071068} + 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_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!114 &2091522318 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091522316} + 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: 0 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &2091522319 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091522316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0.02 + smoothing: 0 + twist: 0 + indexInSystem: 3 +--- !u!114 &2091522320 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091522316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 62010000630100006401000065010000660100006701000068010000690100006a0100006b0100006c0100006d0100006e0100006f010000700100007101000072010000730100007401000075010000760100007701000078010000790100007a0100007b0100007c0100007d0100007e0100007f010000800100008101000082010000830100008401000085010000860100008701000088010000890100008a0100008b0100008c0100008d0100008e0100008f010000900100009101000092010000930100009401000095010000960100009701000098010000990100009a0100009b0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a8010000a9010000aa010000ab010000ac010000ad010000ae010000af010000b0010000b1010000b2010000b3010000b4010000b5010000b6010000b7010000b8010000b9010000ba010000bb010000bc010000bd010000be010000bf010000c0010000c1010000c2010000c3010000c4010000c5010000c6010000c7010000c8010000c9010000ca010000cb010000cc010000cd010000ce010000cf010000d0010000d1010000d2010000d3010000d4010000d5010000d6010000d7010000 + m_AlignBytes: 16 + groupID: 4 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_SelfCollisions: 1 + restLength_: 2.000002 + elements: + - particle1: 354 + particle2: 355 + restLength: 0.11670005 + constraintForce: 0 + tearResistance: 1 + - particle1: 355 + particle2: 356 + restLength: 0.11680669 + constraintForce: 0 + tearResistance: 1 + - particle1: 356 + particle2: 357 + restLength: 0.11829093 + constraintForce: 0 + tearResistance: 1 + - particle1: 357 + particle2: 358 + restLength: 0.117395446 + constraintForce: 0 + tearResistance: 1 + - particle1: 358 + particle2: 359 + restLength: 0.11783301 + constraintForce: 0 + tearResistance: 1 + - particle1: 359 + particle2: 360 + restLength: 0.11791115 + constraintForce: 0 + tearResistance: 1 + - particle1: 360 + particle2: 361 + restLength: 0.1178735 + constraintForce: 0 + tearResistance: 1 + - particle1: 361 + particle2: 362 + restLength: 0.117807046 + constraintForce: 0 + tearResistance: 1 + - particle1: 362 + particle2: 363 + restLength: 0.11774122 + constraintForce: 0 + tearResistance: 1 + - particle1: 363 + particle2: 364 + restLength: 0.11778654 + constraintForce: 0 + tearResistance: 1 + - particle1: 364 + particle2: 365 + restLength: 0.117860526 + constraintForce: 0 + tearResistance: 1 + - particle1: 365 + particle2: 366 + restLength: 0.11791558 + constraintForce: 0 + tearResistance: 1 + - particle1: 366 + particle2: 367 + restLength: 0.11788291 + constraintForce: 0 + tearResistance: 1 + - particle1: 367 + particle2: 368 + restLength: 0.11756081 + constraintForce: 0 + tearResistance: 1 + - particle1: 368 + particle2: 369 + restLength: 0.11787611 + constraintForce: 0 + tearResistance: 1 + - particle1: 369 + particle2: 370 + restLength: 0.11770154 + constraintForce: 0 + tearResistance: 1 + - particle1: 370 + particle2: 371 + 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 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.05 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &2091522321 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091522316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 2091522320} + m_Target: {fileID: 2091522317} + m_ParticleGroup: {fileID: 1119723573710947368, guid: df057526865004da9ac53f3c8bc43d9f, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &2091522322 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091522316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 2091522320} + m_Target: {fileID: 254982895} + m_ParticleGroup: {fileID: 1023878380947534591, guid: df057526865004da9ac53f3c8bc43d9f, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &2091522325 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091522316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83c7e82b3aac04e408bc8bfe9027c983, type: 3} + m_Name: + m_EditorClassIdentifier: + minLength: 0.1 + speed: 1 +--- !u!114 &2091522326 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091522316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8285ac97113f74d449053378d0e3a56b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_CursorMu: 0.95 + m_SourceMu: 0.95 + direction: 0 +--- !u!114 &2091522327 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091522316} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c8b45ebbf86be4df6b0e6cd933812af2, type: 3} + m_Name: + m_EditorClassIdentifier: + 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 + 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: 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 + colliderCCD: 1 + particleCCD: 0 + shockPropagation: 0 + surfaceCollisionIterations: 8 + surfaceCollisionTolerance: 0.005 + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + maxFoamVelocityStretch: 0.3 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + worldLinearInertiaScale: 0 + worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 + distanceConstraintParameters: + evaluationOrder: 0 + iterations: 10 + SORFactor: 1 + enabled: 1 + bendingConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + particleCollisionConstraintParameters: + evaluationOrder: 0 + iterations: 1 + SORFactor: 1 + enabled: 1 + particleFrictionConstraintParameters: + evaluationOrder: 0 + 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: 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 + 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} + 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: 1007350293} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/FreightLift.unity.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/FreightLift.unity.meta new file mode 100644 index 00000000..307bcd8a --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/FreightLift.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f2c99bab98af74a5ebf6edfe56636bc8 +labels: +- ObiRope +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/Plectoneme.unity b/xiaofang/Assets/Obi/Samples/RopeAndRod/Plectoneme.unity new file mode 100644 index 00000000..86ab8b4b --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/Plectoneme.unity @@ -0,0 +1,2009 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + 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: 60cb1fcd40f2443829b552612b4b0ac8, type: 2} +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &166844960 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 166844962} + - component: {fileID: 166844961} + m_Layer: 0 + m_Name: Solver (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &166844961 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 166844960} + 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: 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 + colliderCCD: 1 + particleCCD: 0 + shockPropagation: 0 + surfaceCollisionIterations: 8 + surfaceCollisionTolerance: 0.005 + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + maxFoamVelocityStretch: 0.3 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + worldLinearInertiaScale: 0 + worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 + distanceConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 0 + bendingConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 0 + particleCollisionConstraintParameters: + evaluationOrder: 0 + iterations: 5 + SORFactor: 1 + enabled: 1 + particleFrictionConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 1 + collisionConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 1 + frictionConstraintParameters: + evaluationOrder: 1 + iterations: 3 + 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: 0 + iterations: 10 + SORFactor: 1 + enabled: 0 + stitchConstraintParameters: + evaluationOrder: 1 + iterations: 2 + SORFactor: 1 + enabled: 0 + densityConstraintParameters: + evaluationOrder: 1 + iterations: 2 + SORFactor: 1 + enabled: 0 + stretchShearConstraintParameters: + evaluationOrder: 1 + iterations: 6 + SORFactor: 1 + enabled: 1 + bendTwistConstraintParameters: + evaluationOrder: 1 + iterations: 6 + SORFactor: 1 + enabled: 1 + chainConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 1 +--- !u!4 &166844962 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 166844960} + 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: 594372083} + m_Father: {fileID: 0} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &326895829 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 326895831} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &326895831 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 326895829} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.97937447, y: 2.82, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1733402950} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &421764872 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + 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_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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + 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 &537986385 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 537986386} + - component: {fileID: 537986389} + - component: {fileID: 537986388} + - component: {fileID: 537986387} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &537986386 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 537986385} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.034563184, y: 0, z: 0} + m_LocalScale: {x: 0.1, y: 0.3, z: 0.1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1174747260} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &537986387 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 537986385} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &537986388 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 537986385} + 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: 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: 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 &537986389 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 537986385} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &594372082 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 594372083} + - component: {fileID: 594372089} + - component: {fileID: 594372088} + - component: {fileID: 594372087} + - component: {fileID: 594372086} + - component: {fileID: 594372085} + - component: {fileID: 594372084} + m_Layer: 0 + m_Name: Obi Rod + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &594372083 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 594372082} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.039, y: 2.82, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 166844962} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &594372084 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 594372082} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 594372088} + m_Target: {fileID: 1225217992} + m_ParticleGroup: {fileID: 5048701005528565804, guid: 74806658f50d141e88786022b12fc58b, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 1 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &594372085 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 594372082} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 594372088} + m_Target: {fileID: 1662616632} + m_ParticleGroup: {fileID: -3402949915523605302, guid: 74806658f50d141e88786022b12fc58b, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 1 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &594372086 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 594372082} + m_Enabled: 1 + m_EditorHideFlags: 0 + 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 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &594372087 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 594372082} + 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 &594372088 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 594372082} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8f2bc32c4faf04f039a86a6e3cea12a1, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + m_AlignBytes: 16 + groupID: 1 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_SelfCollisions: 1 + restLength_: 1.9999998 + elements: + - particle1: 0 + particle2: 1 + restLength: 0.049322546 + constraintForce: 0 + tearResistance: 0 + - particle1: 1 + particle2: 2 + restLength: 0.050302863 + constraintForce: 0 + tearResistance: 0 + - particle1: 2 + particle2: 3 + restLength: 0.048888803 + constraintForce: 0 + tearResistance: 0 + - particle1: 3 + particle2: 4 + restLength: 0.050338387 + constraintForce: 0 + tearResistance: 0 + - particle1: 4 + particle2: 5 + restLength: 0.050490856 + constraintForce: 0 + tearResistance: 0 + - particle1: 5 + particle2: 6 + restLength: 0.0494833 + constraintForce: 0 + tearResistance: 0 + - particle1: 6 + particle2: 7 + restLength: 0.050834358 + constraintForce: 0 + tearResistance: 0 + - particle1: 7 + particle2: 8 + restLength: 0.049355686 + constraintForce: 0 + tearResistance: 0 + - particle1: 8 + particle2: 9 + restLength: 0.050579965 + constraintForce: 0 + tearResistance: 0 + - particle1: 9 + particle2: 10 + restLength: 0.049668133 + constraintForce: 0 + tearResistance: 0 + - particle1: 10 + particle2: 11 + restLength: 0.050201297 + constraintForce: 0 + tearResistance: 0 + - particle1: 11 + particle2: 12 + restLength: 0.050103366 + constraintForce: 0 + tearResistance: 0 + - particle1: 12 + particle2: 13 + restLength: 0.049883336 + constraintForce: 0 + tearResistance: 0 + - particle1: 13 + particle2: 14 + restLength: 0.050436974 + constraintForce: 0 + tearResistance: 0 + - particle1: 14 + particle2: 15 + restLength: 0.049704492 + constraintForce: 0 + tearResistance: 0 + - particle1: 15 + particle2: 16 + restLength: 0.050257146 + constraintForce: 0 + tearResistance: 0 + - particle1: 16 + particle2: 17 + restLength: 0.049968615 + constraintForce: 0 + tearResistance: 0 + - particle1: 17 + particle2: 18 + restLength: 0.050020218 + constraintForce: 0 + tearResistance: 0 + - particle1: 18 + particle2: 19 + restLength: 0.05014978 + constraintForce: 0 + tearResistance: 0 + - particle1: 19 + particle2: 20 + restLength: 0.050009843 + constraintForce: 0 + tearResistance: 0 + - particle1: 20 + particle2: 21 + restLength: 0.05000964 + constraintForce: 0 + tearResistance: 0 + - particle1: 21 + particle2: 22 + restLength: 0.050149772 + constraintForce: 0 + tearResistance: 0 + - particle1: 22 + particle2: 23 + restLength: 0.05002047 + constraintForce: 0 + tearResistance: 0 + - particle1: 23 + particle2: 24 + restLength: 0.049968615 + constraintForce: 0 + tearResistance: 0 + - particle1: 24 + particle2: 25 + restLength: 0.050256997 + constraintForce: 0 + tearResistance: 0 + - particle1: 25 + particle2: 26 + restLength: 0.049704522 + constraintForce: 0 + tearResistance: 0 + - particle1: 26 + particle2: 27 + restLength: 0.050436974 + constraintForce: 0 + tearResistance: 0 + - particle1: 27 + particle2: 28 + restLength: 0.049883336 + constraintForce: 0 + tearResistance: 0 + - particle1: 28 + particle2: 29 + restLength: 0.050103366 + constraintForce: 0 + tearResistance: 0 + - particle1: 29 + particle2: 30 + restLength: 0.050201327 + constraintForce: 0 + tearResistance: 0 + - particle1: 30 + particle2: 31 + restLength: 0.049668252 + constraintForce: 0 + tearResistance: 0 + - particle1: 31 + particle2: 32 + restLength: 0.050579846 + constraintForce: 0 + tearResistance: 0 + - particle1: 32 + particle2: 33 + restLength: 0.049355567 + constraintForce: 0 + tearResistance: 0 + - particle1: 33 + particle2: 34 + restLength: 0.050834477 + constraintForce: 0 + tearResistance: 0 + - particle1: 34 + particle2: 35 + restLength: 0.0494833 + constraintForce: 0 + tearResistance: 0 + - particle1: 35 + particle2: 36 + restLength: 0.050490975 + constraintForce: 0 + tearResistance: 0 + - particle1: 36 + particle2: 37 + restLength: 0.050338387 + constraintForce: 0 + tearResistance: 0 + - particle1: 37 + particle2: 38 + restLength: 0.048888862 + constraintForce: 0 + tearResistance: 0 + - particle1: 38 + particle2: 39 + restLength: 0.050302804 + constraintForce: 0 + tearResistance: 0 + - particle1: 39 + particle2: 40 + 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 + _shear1Compliance: 0 + _shear2Compliance: 0 + _bendTwistConstraintsEnabled: 1 + _torsionCompliance: 0 + _bend1Compliance: 0 + _bend2Compliance: 0 + _plasticYield: 0 + _plasticCreep: 0 + _chainConstraintsEnabled: 1 + _tightness: 1 +--- !u!114 &594372089 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 594372082} + 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!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_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 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} + m_LocalRotation: {x: 0.15760262, y: 0, z: 0, w: 0.98750263} + m_LocalPosition: {x: 0, y: 3.19, z: -1.52} + 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 &1072598549 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1072598560} + - component: {fileID: 1072598551} + - component: {fileID: 1072598550} + - component: {fileID: 1072598553} + - component: {fileID: 1072598552} + - component: {fileID: 1072598555} + - component: {fileID: 1072598554} + m_Layer: 0 + m_Name: Obi Rod + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1072598550 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072598549} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8f2bc32c4faf04f039a86a6e3cea12a1, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: + m_AlignBytes: 16 + groupID: 1 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_SelfCollisions: 1 + restLength_: 1.9999998 + elements: + - particle1: 0 + particle2: 1 + restLength: 0.049322546 + constraintForce: 0 + tearResistance: 0 + - particle1: 1 + particle2: 2 + restLength: 0.050302863 + constraintForce: 0 + tearResistance: 0 + - particle1: 2 + particle2: 3 + restLength: 0.048888803 + constraintForce: 0 + tearResistance: 0 + - particle1: 3 + particle2: 4 + restLength: 0.050338387 + constraintForce: 0 + tearResistance: 0 + - particle1: 4 + particle2: 5 + restLength: 0.050490856 + constraintForce: 0 + tearResistance: 0 + - particle1: 5 + particle2: 6 + restLength: 0.0494833 + constraintForce: 0 + tearResistance: 0 + - particle1: 6 + particle2: 7 + restLength: 0.050834358 + constraintForce: 0 + tearResistance: 0 + - particle1: 7 + particle2: 8 + restLength: 0.049355686 + constraintForce: 0 + tearResistance: 0 + - particle1: 8 + particle2: 9 + restLength: 0.050579965 + constraintForce: 0 + tearResistance: 0 + - particle1: 9 + particle2: 10 + restLength: 0.049668133 + constraintForce: 0 + tearResistance: 0 + - particle1: 10 + particle2: 11 + restLength: 0.050201297 + constraintForce: 0 + tearResistance: 0 + - particle1: 11 + particle2: 12 + restLength: 0.050103366 + constraintForce: 0 + tearResistance: 0 + - particle1: 12 + particle2: 13 + restLength: 0.049883336 + constraintForce: 0 + tearResistance: 0 + - particle1: 13 + particle2: 14 + restLength: 0.050436974 + constraintForce: 0 + tearResistance: 0 + - particle1: 14 + particle2: 15 + restLength: 0.049704492 + constraintForce: 0 + tearResistance: 0 + - particle1: 15 + particle2: 16 + restLength: 0.050257146 + constraintForce: 0 + tearResistance: 0 + - particle1: 16 + particle2: 17 + restLength: 0.049968615 + constraintForce: 0 + tearResistance: 0 + - particle1: 17 + particle2: 18 + restLength: 0.050020218 + constraintForce: 0 + tearResistance: 0 + - particle1: 18 + particle2: 19 + restLength: 0.05014978 + constraintForce: 0 + tearResistance: 0 + - particle1: 19 + particle2: 20 + restLength: 0.050009843 + constraintForce: 0 + tearResistance: 0 + - particle1: 20 + particle2: 21 + restLength: 0.05000964 + constraintForce: 0 + tearResistance: 0 + - particle1: 21 + particle2: 22 + restLength: 0.050149772 + constraintForce: 0 + tearResistance: 0 + - particle1: 22 + particle2: 23 + restLength: 0.05002047 + constraintForce: 0 + tearResistance: 0 + - particle1: 23 + particle2: 24 + restLength: 0.049968615 + constraintForce: 0 + tearResistance: 0 + - particle1: 24 + particle2: 25 + restLength: 0.050256997 + constraintForce: 0 + tearResistance: 0 + - particle1: 25 + particle2: 26 + restLength: 0.049704522 + constraintForce: 0 + tearResistance: 0 + - particle1: 26 + particle2: 27 + restLength: 0.050436974 + constraintForce: 0 + tearResistance: 0 + - particle1: 27 + particle2: 28 + restLength: 0.049883336 + constraintForce: 0 + tearResistance: 0 + - particle1: 28 + particle2: 29 + restLength: 0.050103366 + constraintForce: 0 + tearResistance: 0 + - particle1: 29 + particle2: 30 + restLength: 0.050201327 + constraintForce: 0 + tearResistance: 0 + - particle1: 30 + particle2: 31 + restLength: 0.049668252 + constraintForce: 0 + tearResistance: 0 + - particle1: 31 + particle2: 32 + restLength: 0.050579846 + constraintForce: 0 + tearResistance: 0 + - particle1: 32 + particle2: 33 + restLength: 0.049355567 + constraintForce: 0 + tearResistance: 0 + - particle1: 33 + particle2: 34 + restLength: 0.050834477 + constraintForce: 0 + tearResistance: 0 + - particle1: 34 + particle2: 35 + restLength: 0.0494833 + constraintForce: 0 + tearResistance: 0 + - particle1: 35 + particle2: 36 + restLength: 0.050490975 + constraintForce: 0 + tearResistance: 0 + - particle1: 36 + particle2: 37 + restLength: 0.050338387 + constraintForce: 0 + tearResistance: 0 + - particle1: 37 + particle2: 38 + restLength: 0.048888862 + constraintForce: 0 + tearResistance: 0 + - particle1: 38 + particle2: 39 + restLength: 0.050302804 + constraintForce: 0 + tearResistance: 0 + - particle1: 39 + particle2: 40 + 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 + _shear1Compliance: 0 + _shear2Compliance: 0 + _bendTwistConstraintsEnabled: 1 + _torsionCompliance: 0 + _bend1Compliance: 0 + _bend2Compliance: 0 + _plasticYield: 0 + _plasticCreep: 0 + _chainConstraintsEnabled: 1 + _tightness: 1 +--- !u!114 &1072598551 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072598549} + 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 &1072598552 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072598549} + m_Enabled: 1 + m_EditorHideFlags: 0 + 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 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &1072598553 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072598549} + 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 &1072598554 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072598549} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1072598550} + m_Target: {fileID: 537986386} + m_ParticleGroup: {fileID: 5048701005528565804, guid: 74806658f50d141e88786022b12fc58b, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 1 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1072598555 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072598549} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1072598550} + m_Target: {fileID: 1733402950} + m_ParticleGroup: {fileID: -3402949915523605302, guid: 74806658f50d141e88786022b12fc58b, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 1 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!4 &1072598560 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072598549} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.039, y: 2.82, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1718836712} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1174747258 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1174747260} + - component: {fileID: 1174747261} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1174747260 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1174747258} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.0486681, y: 2.82, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 537986386} + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!95 &1174747261 +Animator: + serializedVersion: 5 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1174747258} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: 97c29ef2dfc89427385f43924109cfa8, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 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: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.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_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1175446146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + 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 &1225217988 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1225217992} + - component: {fileID: 1225217991} + - component: {fileID: 1225217990} + - component: {fileID: 1225217989} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &1225217989 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1225217988} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1225217990 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1225217988} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1225217991 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1225217988} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1225217992 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1225217988} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.5, y: 2.45, z: 0.38} + 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 &1624468059 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1624468061} + - component: {fileID: 1624468060} + m_Layer: 0 + m_Name: BurstCollisionWorld + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1624468060 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1624468059} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} + m_Name: + m_EditorClassIdentifier: + 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: 1624468059} + 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 &1662616628 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1662616632} + - component: {fileID: 1662616631} + - component: {fileID: 1662616630} + - component: {fileID: 1662616629} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &1662616629 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1662616628} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1662616630 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1662616628} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1662616631 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1662616628} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1662616632 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1662616628} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.93, y: 2.74, z: 0.37} + 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 &1718836709 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1718836712} + - component: {fileID: 1718836711} + m_Layer: 0 + m_Name: Solver + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!114 &1718836711 +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: 9d174fab52f0c4b8399f25d5c3ea524c, type: 3} + m_Name: + 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 + colliderCCD: 1 + particleCCD: 0 + shockPropagation: 0 + surfaceCollisionIterations: 8 + surfaceCollisionTolerance: 0.005 + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + maxFoamVelocityStretch: 0.3 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + worldLinearInertiaScale: 0 + worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 + distanceConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 0 + bendingConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 0 + particleCollisionConstraintParameters: + evaluationOrder: 0 + iterations: 5 + SORFactor: 1 + enabled: 1 + particleFrictionConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 1 + collisionConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 1 + frictionConstraintParameters: + evaluationOrder: 1 + iterations: 3 + 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: 0 + iterations: 10 + SORFactor: 1 + enabled: 0 + stitchConstraintParameters: + evaluationOrder: 1 + iterations: 2 + SORFactor: 1 + enabled: 0 + densityConstraintParameters: + evaluationOrder: 1 + iterations: 2 + SORFactor: 1 + enabled: 0 + stretchShearConstraintParameters: + evaluationOrder: 1 + iterations: 6 + SORFactor: 1 + enabled: 1 + bendTwistConstraintParameters: + evaluationOrder: 1 + iterations: 6 + SORFactor: 1 + enabled: 1 + chainConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 1 +--- !u!4 &1718836712 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1718836709} + 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: 1072598560} + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1733402949 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1733402950} + - component: {fileID: 1733402953} + - component: {fileID: 1733402952} + - component: {fileID: 1733402951} + 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 &1733402950 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733402949} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.033625543, y: 0, z: 0} + m_LocalScale: {x: 0.099999994, y: 0.29999998, z: 0.099999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 326895831} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1733402951 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733402949} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1733402952 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733402949} + 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: 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: 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 &1733402953 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733402949} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/Plectoneme.unity.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/Plectoneme.unity.meta new file mode 100644 index 00000000..e9a96f2b --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/Plectoneme.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 328a6310251d54b959032988b2b6a480 +labels: +- ObiRope +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/PlectonemeSettings.lighting b/xiaofang/Assets/Obi/Samples/RopeAndRod/PlectonemeSettings.lighting new file mode 100644 index 00000000..e6e5ed3b --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/PlectonemeSettings.lighting @@ -0,0 +1,64 @@ +%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: PlectonemeSettings + serializedVersion: 4 + 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_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_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 + m_PVRTiledBaking: 0 diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/PlectonemeSettings.lighting.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/PlectonemeSettings.lighting.meta new file mode 100644 index 00000000..84696b37 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/PlectonemeSettings.lighting.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 60cb1fcd40f2443829b552612b4b0ac8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4890085278179872738 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/RenderModes.unity b/xiaofang/Assets/Obi/Samples/RopeAndRod/RenderModes.unity new file mode 100644 index 00000000..0ab3bec7 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/RenderModes.unity @@ -0,0 +1,1590 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + 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: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &421764872 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + 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_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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + 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} + 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 &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} + 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_RootOrder: 1 + 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_Compliance: 0 + m_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_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} + 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_RootOrder: 3 + 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_Compliance: 0 + m_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_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_RootOrder: 0 + 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_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 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} + 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_RootOrder: 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_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_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 &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} + 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_RootOrder: 2 + 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_Compliance: 0 + m_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_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: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.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_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1175446146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + 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 &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} + 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_RootOrder: 0 + 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_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_Compliance: 0 + m_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 + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + maxFoamVelocityStretch: 0.3 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + 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 + 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} + 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_RootOrder: 3 + 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: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/RenderModes.unity.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/RenderModes.unity.meta new file mode 100644 index 00000000..7b96d264 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/RenderModes.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b5657544ccae14cb6bab0a77ecdf31f1 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/Rocker.unity b/xiaofang/Assets/Obi/Samples/RopeAndRod/Rocker.unity new file mode 100644 index 00000000..59515720 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/Rocker.unity @@ -0,0 +1,1855 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + 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: 22a51826813394dfda17b2e81584d97a, type: 2} +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &283647873 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 283647877} + - component: {fileID: 283647876} + - component: {fileID: 283647875} + - component: {fileID: 283647874} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &283647874 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 283647873} + 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 &283647875 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 283647873} + 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 &283647876 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 283647873} + 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_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &283647877 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 283647873} + 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} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &359190389 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 359190391} + - component: {fileID: 359190390} + m_Layer: 0 + m_Name: BurstCollisionWorld + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &359190390 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 359190389} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} + m_Name: + m_EditorClassIdentifier: + cellSpans: + m_AlignBytes: 16 +--- !u!4 &359190391 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 359190389} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 371642823} + - component: {fileID: 371642826} + - component: {fileID: 371642825} + - component: {fileID: 371642824} + - component: {fileID: 371642827} + m_Layer: 0 + m_Name: Side2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &371642823 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 371642822} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 371642822} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &371642825 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 371642822} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &371642826 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 371642822} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &371642827 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 371642822} + 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: 371642825} + m_DistanceField: {fileID: 0} +--- !u!1001 &421764872 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + 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_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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + 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 &582899616 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 582899617} + - component: {fileID: 582899621} + - component: {fileID: 582899620} + - component: {fileID: 582899619} + - component: {fileID: 582899618} + m_Layer: 5 + m_Name: FPSDisplay + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &582899617 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 582899616} + 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} + m_AnchoredPosition: {x: 99, y: -31} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &582899618 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 582899616} + 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 &582899619 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 582899616} + 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 &582899620 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 582899616} + 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 &582899621 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 582899616} + 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_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 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} + 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!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: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.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_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1175446146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1196756662} + - component: {fileID: 1196756661} + - component: {fileID: 1196756660} + - component: {fileID: 1196756659} + - component: {fileID: 1196756663} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1196756659 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1196756658} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1196756660 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1196756658} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1196756661 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1196756658} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1196756662 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1196756658} + 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: 5 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1196756658} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: d48cf3556d5844543a51259340bc1344, type: 2} + m_CullingMode: 0 + m_UpdateMode: 1 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 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: 1346965648} + - component: {fileID: 1346965647} + 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: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000 + m_AlignBytes: 16 + groupID: 1 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_SelfCollisions: 0 + restLength_: 2.017229 + elements: + - particle1: 0 + particle2: 1 + restLength: 0.18298253 + constraintForce: 0 + tearResistance: 1 + - particle1: 1 + particle2: 2 + restLength: 0.18343952 + constraintForce: 0 + tearResistance: 1 + - particle1: 2 + particle2: 3 + restLength: 0.18301578 + constraintForce: 0 + tearResistance: 1 + - particle1: 3 + particle2: 4 + restLength: 0.18388647 + constraintForce: 0 + tearResistance: 1 + - particle1: 4 + particle2: 5 + restLength: 0.18345642 + constraintForce: 0 + tearResistance: 1 + - particle1: 5 + particle2: 6 + restLength: 0.18361436 + constraintForce: 0 + tearResistance: 1 + - particle1: 6 + particle2: 7 + restLength: 0.18370213 + constraintForce: 0 + tearResistance: 1 + - particle1: 7 + particle2: 8 + restLength: 0.18345217 + constraintForce: 0 + tearResistance: 1 + - particle1: 8 + particle2: 9 + restLength: 0.18332246 + constraintForce: 0 + tearResistance: 1 + - particle1: 9 + particle2: 10 + restLength: 0.1834608 + constraintForce: 0 + tearResistance: 1 + - particle1: 10 + particle2: 11 + 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 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.04 + _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: 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 &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: 0 +--- !u!114 &1346965647 +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: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1346965642} + m_Target: {fileID: 1499352028} + m_ParticleGroup: {fileID: -3735696104525882986, guid: ca9e262f11fb246cbb6d2177bacb27ea, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1346965648 +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: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1346965642} + m_Target: {fileID: 1817376321} + m_ParticleGroup: {fileID: 8673311686603544650, guid: ca9e262f11fb246cbb6d2177bacb27ea, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!4 &1346965650 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1346965641} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1356049002} + - component: {fileID: 1356049005} + - component: {fileID: 1356049004} + - component: {fileID: 1356049003} + - component: {fileID: 1356049006} + m_Layer: 0 + m_Name: Side1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1356049002 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1356049001} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1356049001} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1356049004 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1356049001} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1356049005 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1356049001} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &1356049006 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1356049001} + 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: 1356049004} + m_DistanceField: {fileID: 0} +--- !u!1 &1376993202 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1376993203} + m_Layer: 0 + m_Name: Rocker + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1376993203 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1376993202} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1499352028} + - component: {fileID: 1499352032} + - component: {fileID: 1499352031} + - component: {fileID: 1499352030} + - component: {fileID: 1499352029} + - component: {fileID: 1499352034} + - component: {fileID: 1499352033} + m_Layer: 10 + m_Name: Weight 2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1499352028 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1499352027} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1499352027} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!23 &1499352030 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1499352027} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!135 &1499352031 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1499352027} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1499352032 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1499352027} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &1499352033 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1499352027} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!114 &1499352034 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1499352027} + 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: -131071 + m_SourceCollider: {fileID: 1499352031} + m_DistanceField: {fileID: 0} +--- !u!1 &1817376320 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1817376321} + - component: {fileID: 1817376325} + - component: {fileID: 1817376324} + - component: {fileID: 1817376323} + - component: {fileID: 1817376322} + - component: {fileID: 1817376327} + - component: {fileID: 1817376326} + m_Layer: 10 + m_Name: Weight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1817376321 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817376320} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817376320} + serializedVersion: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!23 &1817376323 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817376320} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!135 &1817376324 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817376320} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1817376325 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817376320} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &1817376326 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817376320} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!114 &1817376327 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1817376320} + 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: -131071 + m_SourceCollider: {fileID: 1817376324} + m_DistanceField: {fileID: 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: 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 + colliderCCD: 1 + particleCCD: 0 + shockPropagation: 0 + surfaceCollisionIterations: 8 + surfaceCollisionTolerance: 0.005 + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + maxFoamVelocityStretch: 0.3 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + worldLinearInertiaScale: 0 + worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 + distanceConstraintParameters: + evaluationOrder: 0 + iterations: 20 + SORFactor: 1 + enabled: 1 + bendingConstraintParameters: + evaluationOrder: 0 + iterations: 2 + SORFactor: 1 + enabled: 1 + particleCollisionConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 0 + particleFrictionConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 0 + collisionConstraintParameters: + evaluationOrder: 1 + iterations: 5 + SORFactor: 1 + enabled: 1 + frictionConstraintParameters: + evaluationOrder: 1 + iterations: 3 + 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: 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} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2124930376} + - component: {fileID: 2124930375} + - component: {fileID: 2124930374} + - component: {fileID: 2124930373} + - component: {fileID: 2124930377} + - component: {fileID: 2124930378} + - component: {fileID: 2124930379} + m_Layer: 0 + m_Name: Center + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &2124930373 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124930372} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &2124930374 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124930372} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &2124930375 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124930372} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &2124930376 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124930372} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124930372} + serializedVersion: 2 + m_Mass: 20 + m_Drag: 0 + m_AngularDrag: 0.2 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 62 + m_CollisionDetection: 0 +--- !u!114 &2124930378 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124930372} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} + m_Name: + m_EditorClassIdentifier: + thickness: 0.02 + inverted: 0 + material: {fileID: 11400000, guid: d368f2c47473d4bfb8dd9f08073cb403, type: 2} + filter: -65535 + m_SourceCollider: {fileID: 2124930374} + m_DistanceField: {fileID: 0} +--- !u!114 &2124930379 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124930372} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/Rocker.unity.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/Rocker.unity.meta new file mode 100644 index 00000000..795c2fef --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/Rocker.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9c8d31b0b36434fd199dc8bf5919ba85 +labels: +- ObiRope +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/RockerSettings.lighting b/xiaofang/Assets/Obi/Samples/RopeAndRod/RockerSettings.lighting new file mode 100644 index 00000000..61624930 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/RockerSettings.lighting @@ -0,0 +1,64 @@ +%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: RockerSettings + serializedVersion: 4 + 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_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_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 + m_PVRTiledBaking: 0 diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/RockerSettings.lighting.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/RockerSettings.lighting.meta new file mode 100644 index 00000000..6bbb3f5b --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/RockerSettings.lighting.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 22a51826813394dfda17b2e81584d97a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4890085278179872738 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeAndJoints.unity b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeAndJoints.unity new file mode 100644 index 00000000..078a1f25 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeAndJoints.unity @@ -0,0 +1,2569 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + 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: 27534f20d18eb45b0acb536b299b8a0c, type: 2} +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &296577041 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 296577042} + - component: {fileID: 296577046} + - component: {fileID: 296577045} + - component: {fileID: 296577044} + - component: {fileID: 296577043} + m_Layer: 5 + m_Name: FPSDisplay + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &296577042 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 296577041} + 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} + m_AnchoredPosition: {x: 99, y: -31} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &296577043 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 296577041} + 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 &296577044 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 296577041} + 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 &296577045 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 296577041} + 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 &296577046 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 296577041} + m_CullTransparentMesh: 0 +--- !u!1001 &421764872 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + 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_SourcePrefab: {fileID: 100100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} +--- !u!1 &491995553 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 491995559} + - component: {fileID: 491995558} + - component: {fileID: 491995557} + - component: {fileID: 491995556} + - component: {fileID: 491995555} + - component: {fileID: 491995554} + m_Layer: 10 + m_Name: Capsule (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!59 &491995554 +HingeJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 491995553} + m_ConnectedBody: {fileID: 0} + m_ConnectedArticulationBody: {fileID: 0} + m_Anchor: {x: 0, y: 0.5000001, z: 0} + m_Axis: {x: 0, y: 0, z: 1} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: -1.2849011, y: 4.086458, z: 0.19} + m_UseSpring: 0 + m_Spring: + spring: 0 + damper: 0 + targetPosition: 0 + m_UseMotor: 0 + m_Motor: + targetVelocity: 0 + force: 0 + freeSpin: 0 + m_UseLimits: 0 + m_Limits: + min: 0 + max: 0 + bounciness: 0 + bounceMinVelocity: 0.2 + contactDistance: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!65 &491995555 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 491995553} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!54 &491995556 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 491995553} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 1 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!23 &491995557 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 491995553} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &491995558 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 491995553} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &491995559 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 491995553} + 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: + 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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + 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 &916249660 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 916249664} + - component: {fileID: 916249663} + - component: {fileID: 916249662} + - component: {fileID: 916249661} + - component: {fileID: 916249666} + - component: {fileID: 916249665} + - component: {fileID: 916249668} + - component: {fileID: 916249667} + m_Layer: 10 + m_Name: Cylinder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &916249661 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 916249660} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!136 &916249662 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 916249660} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + m_Radius: 0.5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &916249663 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 916249660} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &916249664 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 916249660} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 916249660} + m_ConnectedBody: {fileID: 0} + m_ConnectedArticulationBody: {fileID: 0} + m_Anchor: {x: 0, y: 1, z: 0} + m_Axis: {x: 0, y: 1, z: 0} + m_AutoConfigureConnectedAnchor: 1 + m_ConnectedAnchor: {x: 1.303, y: 3.175837, z: 0.163} + m_UseSpring: 0 + m_Spring: + spring: 0 + damper: 0 + targetPosition: 0 + m_UseMotor: 1 + m_Motor: + targetVelocity: 100 + force: 300 + freeSpin: 0 + m_UseLimits: 0 + m_Limits: + min: 0 + max: 0 + bounciness: 0 + bounceMinVelocity: 0.2 + contactDistance: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!54 &916249666 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 916249660} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 1 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!114 &916249667 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 916249660} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!114 &916249668 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 916249660} + 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: 916249662} + m_DistanceField: {fileID: 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_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 87.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: 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} + 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!1 &1013469396 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1013469397} + - component: {fileID: 1013469399} + - component: {fileID: 1013469398} + m_Layer: 5 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1013469397 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1013469396} + 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} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1013469398 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1013469396} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1013469399 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1013469396} + 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: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.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_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1175446146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + 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 &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: 1201406219} + - component: {fileID: 1201406218} + - component: {fileID: 1201406217} + - component: {fileID: 1201406223} + - component: {fileID: 1201406222} + - component: {fileID: 1201406225} + - component: {fileID: 1201406224} + 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} + 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: + 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: 5} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !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: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0 + smoothing: 0 + twist: 0 + indexInSystem: 0 +--- !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: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b000000 + m_AlignBytes: 16 + groupID: 1 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_SelfCollisions: 0 + restLength_: 2.1155076 + elements: + - particle1: 0 + particle2: 1 + restLength: 0.08187712 + constraintForce: 0 + tearResistance: 1 + - particle1: 1 + particle2: 2 + restLength: 0.08188899 + constraintForce: 0 + tearResistance: 1 + - particle1: 2 + particle2: 3 + restLength: 0.09349412 + constraintForce: 0 + tearResistance: 1 + - particle1: 3 + particle2: 4 + restLength: 0.09341026 + constraintForce: 0 + tearResistance: 1 + - particle1: 4 + particle2: 5 + restLength: 0.0931865 + constraintForce: 0 + tearResistance: 1 + - particle1: 5 + particle2: 6 + restLength: 0.09309505 + constraintForce: 0 + tearResistance: 1 + - particle1: 6 + particle2: 7 + restLength: 0.09291664 + constraintForce: 0 + tearResistance: 1 + - particle1: 7 + particle2: 8 + restLength: 0.09338906 + constraintForce: 0 + tearResistance: 1 + - particle1: 8 + particle2: 9 + restLength: 0.09332729 + constraintForce: 0 + tearResistance: 1 + - particle1: 9 + particle2: 10 + restLength: 0.09420088 + constraintForce: 0 + tearResistance: 1 + - particle1: 10 + particle2: 11 + restLength: 0.09566547 + constraintForce: 0 + tearResistance: 1 + - particle1: 11 + particle2: 12 + restLength: 0.094373725 + constraintForce: 0 + tearResistance: 1 + - particle1: 12 + particle2: 13 + restLength: 0.09488609 + constraintForce: 0 + tearResistance: 1 + - particle1: 13 + particle2: 14 + restLength: 0.094772704 + constraintForce: 0 + tearResistance: 1 + - particle1: 14 + particle2: 15 + restLength: 0.094846986 + constraintForce: 0 + tearResistance: 1 + - particle1: 15 + particle2: 16 + restLength: 0.0949681 + constraintForce: 0 + tearResistance: 1 + - particle1: 16 + particle2: 17 + restLength: 0.09506482 + constraintForce: 0 + tearResistance: 1 + - particle1: 17 + particle2: 18 + restLength: 0.09513883 + constraintForce: 0 + tearResistance: 1 + - particle1: 18 + particle2: 19 + restLength: 0.09518286 + constraintForce: 0 + tearResistance: 1 + - particle1: 19 + particle2: 20 + restLength: 0.09518514 + constraintForce: 0 + tearResistance: 1 + - particle1: 20 + particle2: 21 + restLength: 0.09484102 + constraintForce: 0 + tearResistance: 1 + - particle1: 21 + particle2: 22 + restLength: 0.07990884 + constraintForce: 0 + tearResistance: 1 + - particle1: 22 + particle2: 23 + 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 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0 + _plasticYield: 0 + _plasticCreep: 0 +--- !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: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1201406219} + m_Target: {fileID: 916249664} + m_ParticleGroup: {fileID: 4437340670510581073, guid: aa522e16fa3d944afa90688caef811d1, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1201406223 +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: 1201406219} + m_Target: {fileID: 2019980195} + m_ParticleGroup: {fileID: 7605297887885229143, guid: aa522e16fa3d944afa90688caef811d1, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1201406224 +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: 1201406219} + m_Target: {fileID: 916249664} + m_ParticleGroup: {fileID: -4396955149452082975, guid: aa522e16fa3d944afa90688caef811d1, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1201406225 +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: 1201406219} + m_Target: {fileID: 2019980195} + m_ParticleGroup: {fileID: 1364724456080004343, guid: aa522e16fa3d944afa90688caef811d1, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!1 &1238800304 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1238800305} + m_Layer: 0 + m_Name: JointSystem1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1238800305 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1238800304} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1295941532} + - component: {fileID: 1295941525} + - component: {fileID: 1295941524} + - component: {fileID: 1295941523} + - component: {fileID: 1295941529} + - component: {fileID: 1295941528} + - component: {fileID: 1295941530} + - component: {fileID: 1295941531} + m_Layer: 11 + m_Name: Obi Rope (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1295941523 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1295941522} + 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: 4} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &1295941524 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1295941522} + 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 &1295941525 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1295941522} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 7c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000a0000000a1000000a2000000a3000000a4000000a5000000a6000000a7000000a8000000a9000000aa000000ab000000ac000000ad000000ae000000af000000b0000000b1000000b2000000b3000000b4000000b5000000b6000000b7000000b8000000b9000000ba000000bb000000bc000000bd000000be000000bf000000c0000000c1000000c2000000c3000000c4000000c5000000c6000000c7000000c8000000c9000000ca000000cb000000cc000000cd000000ce000000cf000000d0000000d1000000d2000000d3000000d4000000d5000000d6000000d7000000d8000000d9000000da000000db000000dc000000dd000000de000000df000000e0000000e1000000e2000000e3000000e4000000e5000000e6000000e7000000e8000000e9000000ea000000eb000000ec000000ed000000ee000000ef000000 + m_AlignBytes: 16 + groupID: 2 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_SelfCollisions: 0 + restLength_: 1.2510417 + elements: + - particle1: 124 + particle2: 125 + restLength: 0.05090946 + constraintForce: 0 + tearResistance: 1 + - particle1: 125 + particle2: 126 + restLength: 0.050947905 + constraintForce: 0 + tearResistance: 1 + - particle1: 126 + particle2: 127 + restLength: 0.093152404 + constraintForce: 0 + tearResistance: 1 + - particle1: 127 + particle2: 128 + restLength: 0.093685806 + constraintForce: 0 + tearResistance: 1 + - particle1: 128 + particle2: 129 + restLength: 0.09356886 + constraintForce: 0 + tearResistance: 1 + - particle1: 129 + particle2: 130 + restLength: 0.09352276 + constraintForce: 0 + tearResistance: 1 + - particle1: 130 + particle2: 131 + restLength: 0.09360525 + constraintForce: 0 + tearResistance: 1 + - particle1: 131 + particle2: 132 + restLength: 0.09355682 + constraintForce: 0 + tearResistance: 1 + - particle1: 132 + particle2: 133 + restLength: 0.093715504 + constraintForce: 0 + tearResistance: 1 + - particle1: 133 + particle2: 134 + restLength: 0.09365523 + constraintForce: 0 + tearResistance: 1 + - particle1: 134 + particle2: 135 + restLength: 0.093458354 + constraintForce: 0 + tearResistance: 1 + - particle1: 135 + particle2: 136 + restLength: 0.09305526 + constraintForce: 0 + tearResistance: 1 + - particle1: 136 + particle2: 137 + restLength: 0.08492255 + constraintForce: 0 + tearResistance: 1 + - particle1: 137 + particle2: 138 + restLength: 0.059066564 + constraintForce: 0 + tearResistance: 1 + - particle1: 138 + particle2: 139 + 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 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &1295941528 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1295941522} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1295941525} + m_Target: {fileID: 1966636104} + m_ParticleGroup: {fileID: 6085013363271969740, guid: 26f4e1ad2bfa7442fa1380d8f5ea809b, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1295941529 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1295941522} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1295941525} + m_Target: {fileID: 916249664} + m_ParticleGroup: {fileID: 2668437529162069470, guid: 26f4e1ad2bfa7442fa1380d8f5ea809b, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1295941530 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1295941522} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1295941525} + m_Target: {fileID: 1966636104} + m_ParticleGroup: {fileID: 8493842404228815792, guid: 26f4e1ad2bfa7442fa1380d8f5ea809b, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1295941531 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1295941522} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1295941525} + m_Target: {fileID: 916249664} + m_ParticleGroup: {fileID: -981642940510787340, guid: 26f4e1ad2bfa7442fa1380d8f5ea809b, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!4 &1295941532 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1295941522} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1323421014} + - component: {fileID: 1323421015} + m_Layer: 5 + m_Name: Toggle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1323421014 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1323421013} + 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} + m_AnchoredPosition: {x: 105.79999, y: 32.600006} + m_SizeDelta: {x: 160, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1323421015 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1323421013} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 2032392337} + toggleTransition: 1 + graphic: {fileID: 1013469398} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2102841798} + m_TargetAssemblyTypeName: SlowmoToggler, Assembly-CSharp + m_MethodName: Slowmo + 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 + m_IsOn: 0 +--- !u!1 &1556965137 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1556965141} + - component: {fileID: 1556965140} + - component: {fileID: 1556965139} + - component: {fileID: 1556965138} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1556965138 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1556965137} + 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 &1556965139 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1556965137} + 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 &1556965140 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1556965137} + 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_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1556965141 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1556965137} + 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 &1690581335 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1690581338} + - component: {fileID: 1690581337} + - component: {fileID: 1690581336} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1690581336 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1690581335} + 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 &1690581337 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1690581335} + 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 &1690581338 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1690581335} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1712865441} + - component: {fileID: 1712865440} + m_Layer: 0 + m_Name: BurstCollisionWorld + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1712865440 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1712865439} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} + m_Name: + m_EditorClassIdentifier: + cellSpans: + m_AlignBytes: 16 +--- !u!4 &1712865441 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1712865439} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1964394701} + - component: {fileID: 1964394703} + - component: {fileID: 1964394702} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1964394701 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1964394700} + 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} + m_AnchoredPosition: {x: 9, y: -0.5} + m_SizeDelta: {x: -28, y: -3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1964394702 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1964394700} + 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.19607843, g: 0.19607843, b: 0.19607843, 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: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Slow motion +--- !u!222 &1964394703 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1964394700} + m_CullTransparentMesh: 0 +--- !u!1 &1966636100 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1966636104} + - component: {fileID: 1966636103} + - component: {fileID: 1966636102} + - component: {fileID: 1966636101} + - component: {fileID: 1966636105} + - component: {fileID: 1966636107} + - component: {fileID: 1966636106} + m_Layer: 11 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1966636101 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1966636100} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!135 &1966636102 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1966636100} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1966636103 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1966636100} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1966636104 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1966636100} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1966636100} + serializedVersion: 2 + m_Mass: 0.2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 1 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!114 &1966636106 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1966636100} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!114 &1966636107 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1966636100} + 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: 1966636102} + m_DistanceField: {fileID: 0} +--- !u!1 &2019980191 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2019980195} + - component: {fileID: 2019980194} + - component: {fileID: 2019980192} + - component: {fileID: 2019980197} + - component: {fileID: 2019980193} + - component: {fileID: 2019980196} + - component: {fileID: 2019980199} + - component: {fileID: 2019980198} + m_Layer: 10 + m_Name: Capsule + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &2019980192 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019980191} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &2019980193 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019980191} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &2019980194 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019980191} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &2019980195 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019980191} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019980191} + 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 + m_ZMotion: 0 + m_AngularXMotion: 2 + m_AngularYMotion: 0 + m_AngularZMotion: 0 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularXLimitSpring: + spring: 0 + damper: 0 + m_LowAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_HighAngularXLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularYZLimitSpring: + spring: 0 + damper: 0 + m_AngularYLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_AngularZLimit: + limit: 0 + bounciness: 0 + contactDistance: 0 + m_TargetPosition: {x: 0, y: 0, z: 0} + m_TargetVelocity: {x: 0, y: 0, z: 0} + m_XDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_YDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + 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 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_AngularYZDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_SlerpDrive: + serializedVersion: 3 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + m_ProjectionMode: 0 + m_ProjectionDistance: 0.1 + m_ProjectionAngle: 180 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 1 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!54 &2019980197 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019980191} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 1 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!114 &2019980198 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019980191} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!114 &2019980199 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019980191} + 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: 2019980193} + m_DistanceField: {fileID: 0} +--- !u!1 &2032392335 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2032392336} + - component: {fileID: 2032392338} + - component: {fileID: 2032392337} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2032392336 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2032392335} + 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} + m_AnchoredPosition: {x: 10, y: -10} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2032392337 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2032392335} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2032392338 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2032392335} + m_CullTransparentMesh: 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: 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: 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 + colliderCCD: 1 + particleCCD: 0 + shockPropagation: 0 + surfaceCollisionIterations: 8 + surfaceCollisionTolerance: 0.005 + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + maxFoamVelocityStretch: 0.3 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + 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: 0 + 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: 1 + SORFactor: 1 + enabled: 0 + tetherConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 0 + pinConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + stitchConstraintParameters: + evaluationOrder: 1 + iterations: 5 + SORFactor: 0.5 + 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} + 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: + 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: 5ec309595a8ca48b3a4deae53d6b023d, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeAndJoints.unity.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeAndJoints.unity.meta new file mode 100644 index 00000000..1481d669 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeAndJoints.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c93058d886f2945439a9c39e808506c2 +labels: +- ObiRope +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeAndJointsSettings.lighting b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeAndJointsSettings.lighting new file mode 100644 index 00000000..a01113f3 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeAndJointsSettings.lighting @@ -0,0 +1,64 @@ +%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: RopeAndJointsSettings + serializedVersion: 4 + 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_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_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 + m_PVRTiledBaking: 0 diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeAndJointsSettings.lighting.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeAndJointsSettings.lighting.meta new file mode 100644 index 00000000..e28265ff --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeAndJointsSettings.lighting.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 27534f20d18eb45b0acb536b299b8a0c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4890085278179872738 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeCutting.unity b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeCutting.unity new file mode 100644 index 00000000..8351128f --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeCutting.unity @@ -0,0 +1,2083 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + 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: 1570830420} +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &21365382 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 21365383} + - component: {fileID: 21365389} + - component: {fileID: 21365388} + - component: {fileID: 21365387} + - component: {fileID: 21365386} + - component: {fileID: 21365385} + - component: {fileID: 21365384} + - component: {fileID: 21365392} + 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 &21365383 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 21365382} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 21365382} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 88cb6f64c607f46b3b0d7a30a99ed18b, type: 3} + m_Name: + m_EditorClassIdentifier: + cam: {fileID: 1002464895} +--- !u!114 &21365385 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 21365382} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 21365389} + m_Target: {fileID: 21365383} + m_ParticleGroup: {fileID: -8864857226987616246, guid: f92460ac39eb444ad8f2bfb5714bb425, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &21365386 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 21365382} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 21365389} + m_Target: {fileID: 21365383} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &21365387 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 21365382} + 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: 16} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &21365388 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 21365382} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0.05 + smoothing: 1 + twist: 0 + indexInSystem: 0 +--- !u!114 &21365389 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 21365382} + 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: 1 + m_SelfCollisions: 1 + restLength_: 5.39185 + elements: + - particle1: 0 + particle2: 1 + restLength: 0.11771238 + constraintForce: 0 + tearResistance: 1 + - particle1: 1 + particle2: 2 + restLength: 0.11794325 + constraintForce: 0 + tearResistance: 1 + - particle1: 2 + particle2: 3 + restLength: 0.117595166 + constraintForce: 0 + tearResistance: 1 + - particle1: 3 + particle2: 4 + restLength: 0.11768351 + constraintForce: 0 + tearResistance: 1 + - particle1: 4 + particle2: 5 + restLength: 0.11783673 + constraintForce: 0 + tearResistance: 1 + - particle1: 5 + particle2: 6 + restLength: 0.117969744 + constraintForce: 0 + tearResistance: 1 + - particle1: 6 + particle2: 7 + restLength: 0.11802316 + constraintForce: 0 + tearResistance: 1 + - particle1: 7 + particle2: 8 + restLength: 0.11796464 + constraintForce: 0 + tearResistance: 1 + - particle1: 8 + particle2: 9 + restLength: 0.1178521 + constraintForce: 0 + tearResistance: 1 + - particle1: 9 + particle2: 10 + restLength: 0.117975526 + constraintForce: 0 + tearResistance: 1 + - particle1: 10 + particle2: 11 + restLength: 0.11801252 + constraintForce: 0 + tearResistance: 1 + - particle1: 11 + particle2: 12 + restLength: 0.11794836 + constraintForce: 0 + tearResistance: 1 + - particle1: 12 + particle2: 13 + restLength: 0.11783 + constraintForce: 0 + tearResistance: 1 + - particle1: 13 + particle2: 14 + restLength: 0.117713265 + constraintForce: 0 + tearResistance: 1 + - particle1: 14 + particle2: 15 + restLength: 0.117651865 + constraintForce: 0 + tearResistance: 1 + - particle1: 15 + particle2: 16 + restLength: 0.117673375 + constraintForce: 0 + tearResistance: 1 + - particle1: 16 + particle2: 17 + restLength: 0.117791526 + constraintForce: 0 + tearResistance: 1 + - particle1: 17 + particle2: 18 + restLength: 0.11774277 + constraintForce: 0 + tearResistance: 1 + - particle1: 18 + particle2: 19 + restLength: 0.11769215 + constraintForce: 0 + tearResistance: 1 + - particle1: 19 + particle2: 20 + restLength: 0.11750718 + constraintForce: 0 + tearResistance: 1 + - particle1: 20 + particle2: 21 + restLength: 0.11741844 + constraintForce: 0 + tearResistance: 1 + - particle1: 21 + particle2: 22 + restLength: 0.1176177 + constraintForce: 0 + tearResistance: 1 + - particle1: 22 + particle2: 23 + restLength: 0.11827736 + constraintForce: 0 + tearResistance: 1 + - particle1: 23 + particle2: 24 + restLength: 0.11706203 + constraintForce: 0 + tearResistance: 1 + - particle1: 24 + particle2: 25 + restLength: 0.11636803 + constraintForce: 0 + tearResistance: 1 + - particle1: 25 + particle2: 26 + restLength: 0.11621493 + constraintForce: 0 + tearResistance: 1 + - particle1: 26 + particle2: 27 + restLength: 0.11634967 + constraintForce: 0 + tearResistance: 1 + - particle1: 27 + particle2: 28 + restLength: 0.11650062 + constraintForce: 0 + tearResistance: 1 + - particle1: 28 + particle2: 29 + restLength: 0.11651943 + constraintForce: 0 + tearResistance: 1 + - particle1: 29 + particle2: 30 + restLength: 0.11646894 + constraintForce: 0 + tearResistance: 1 + - particle1: 30 + particle2: 31 + restLength: 0.11646836 + constraintForce: 0 + tearResistance: 1 + - particle1: 31 + particle2: 32 + restLength: 0.11656151 + constraintForce: 0 + tearResistance: 1 + - particle1: 32 + particle2: 33 + restLength: 0.11671458 + constraintForce: 0 + tearResistance: 1 + - particle1: 33 + particle2: 34 + restLength: 0.11685168 + constraintForce: 0 + tearResistance: 1 + - particle1: 34 + particle2: 35 + restLength: 0.11689511 + constraintForce: 0 + tearResistance: 1 + - particle1: 35 + particle2: 36 + restLength: 0.1167252 + constraintForce: 0 + tearResistance: 1 + - particle1: 36 + particle2: 37 + restLength: 0.11671828 + constraintForce: 0 + tearResistance: 1 + - particle1: 37 + particle2: 38 + restLength: 0.11685561 + constraintForce: 0 + tearResistance: 1 + - particle1: 38 + particle2: 39 + restLength: 0.11681989 + constraintForce: 0 + tearResistance: 1 + - particle1: 39 + particle2: 40 + restLength: 0.11662538 + constraintForce: 0 + tearResistance: 1 + - particle1: 40 + particle2: 41 + restLength: 0.11642074 + constraintForce: 0 + tearResistance: 1 + - particle1: 41 + particle2: 42 + restLength: 0.117048115 + constraintForce: 0 + tearResistance: 1 + - particle1: 42 + particle2: 43 + restLength: 0.11699504 + constraintForce: 0 + tearResistance: 1 + - particle1: 43 + particle2: 44 + restLength: 0.11687661 + constraintForce: 0 + tearResistance: 1 + - particle1: 44 + particle2: 45 + restLength: 0.11661551 + constraintForce: 0 + tearResistance: 1 + - particle1: 45 + particle2: 46 + 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 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0.02 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &21365392 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 21365382} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 011ecd7e601cf4613b5b59bfd9d70895, type: 3} + m_Name: + m_EditorClassIdentifier: + category: 0 +--- !u!1001 &421764872 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + 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_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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + 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: 11400000, guid: 5eb5ff1af3a3f4a14977448198c232ae, type: 2} +--- !u!1 &648289270 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 648289271} + - component: {fileID: 648289277} + - component: {fileID: 648289276} + - component: {fileID: 648289275} + - component: {fileID: 648289274} + - component: {fileID: 648289273} + - component: {fileID: 648289272} + - component: {fileID: 648289280} + 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 &648289271 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 648289270} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 648289270} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 88cb6f64c607f46b3b0d7a30a99ed18b, type: 3} + m_Name: + m_EditorClassIdentifier: + cam: {fileID: 1002464895} +--- !u!114 &648289273 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 648289270} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 648289277} + m_Target: {fileID: 648289271} + m_ParticleGroup: {fileID: -8864857226987616246, guid: f92460ac39eb444ad8f2bfb5714bb425, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &648289274 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 648289270} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 648289277} + m_Target: {fileID: 648289271} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &648289275 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 648289270} + 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: 16} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &648289276 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 648289270} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0.05 + smoothing: 1 + twist: 0 + indexInSystem: 2 +--- !u!114 &648289277 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 648289270} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000a0000000a1000000a2000000a3000000a4000000a5000000a6000000a7000000a8000000a9000000aa000000ab000000ac000000ad000000ae000000af000000b0000000b1000000b2000000b3000000b4000000b5000000b6000000b7000000b8000000b9000000ba000000bb000000bc000000bd000000be000000bf000000c0000000c1000000c2000000c3000000c4000000c5000000c6000000c7000000c8000000c9000000ca000000cb000000cc000000cd000000ce000000cf000000d0000000d1000000d2000000d3000000d4000000d5000000d6000000d7000000d8000000d9000000da000000db000000dc000000dd000000de000000df000000e0000000e1000000e2000000e3000000e4000000e5000000e6000000e7000000e8000000e9000000ea000000eb000000ec000000ed000000ee000000ef000000f0000000f1000000f2000000f3000000f4000000f5000000f6000000f7000000f8000000f9000000fa000000fb000000fc000000fd000000fe000000ff000000000100000101000002010000030100000401000005010000060100000701000008010000090100000a0100000b0100000c0100000d0100000e0100000f010000100100001101000012010000130100001401000015010000160100001701000018010000190100001a0100001b0100001c0100001d0100001e0100001f010000200100002101000022010000230100002401000025010000 + m_AlignBytes: 16 + groupID: 2 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 1 + m_SelfCollisions: 1 + restLength_: 5.39185 + elements: + - particle1: 147 + particle2: 148 + restLength: 0.11771238 + constraintForce: 0 + tearResistance: 1 + - particle1: 148 + particle2: 149 + restLength: 0.11794325 + constraintForce: 0 + tearResistance: 1 + - particle1: 149 + particle2: 150 + restLength: 0.117595166 + constraintForce: 0 + tearResistance: 1 + - particle1: 150 + particle2: 151 + restLength: 0.11768351 + constraintForce: 0 + tearResistance: 1 + - particle1: 151 + particle2: 152 + restLength: 0.11783673 + constraintForce: 0 + tearResistance: 1 + - particle1: 152 + particle2: 153 + restLength: 0.117969744 + constraintForce: 0 + tearResistance: 1 + - particle1: 153 + particle2: 154 + restLength: 0.11802316 + constraintForce: 0 + tearResistance: 1 + - particle1: 154 + particle2: 155 + restLength: 0.11796464 + constraintForce: 0 + tearResistance: 1 + - particle1: 155 + particle2: 156 + restLength: 0.1178521 + constraintForce: 0 + tearResistance: 1 + - particle1: 156 + particle2: 157 + restLength: 0.117975526 + constraintForce: 0 + tearResistance: 1 + - particle1: 157 + particle2: 158 + restLength: 0.11801252 + constraintForce: 0 + tearResistance: 1 + - particle1: 158 + particle2: 159 + restLength: 0.11794836 + constraintForce: 0 + tearResistance: 1 + - particle1: 159 + particle2: 160 + restLength: 0.11783 + constraintForce: 0 + tearResistance: 1 + - particle1: 160 + particle2: 161 + restLength: 0.117713265 + constraintForce: 0 + tearResistance: 1 + - particle1: 161 + particle2: 162 + restLength: 0.117651865 + constraintForce: 0 + tearResistance: 1 + - particle1: 162 + particle2: 163 + restLength: 0.117673375 + constraintForce: 0 + tearResistance: 1 + - particle1: 163 + particle2: 164 + restLength: 0.117791526 + constraintForce: 0 + tearResistance: 1 + - particle1: 164 + particle2: 165 + restLength: 0.11774277 + constraintForce: 0 + tearResistance: 1 + - particle1: 165 + particle2: 166 + restLength: 0.11769215 + constraintForce: 0 + tearResistance: 1 + - particle1: 166 + particle2: 167 + restLength: 0.11750718 + constraintForce: 0 + tearResistance: 1 + - particle1: 167 + particle2: 168 + restLength: 0.11741844 + constraintForce: 0 + tearResistance: 1 + - particle1: 168 + particle2: 169 + restLength: 0.1176177 + constraintForce: 0 + tearResistance: 1 + - particle1: 169 + particle2: 170 + restLength: 0.11827736 + constraintForce: 0 + tearResistance: 1 + - particle1: 170 + particle2: 171 + restLength: 0.11706203 + constraintForce: 0 + tearResistance: 1 + - particle1: 171 + particle2: 172 + restLength: 0.11636803 + constraintForce: 0 + tearResistance: 1 + - particle1: 172 + particle2: 173 + restLength: 0.11621493 + constraintForce: 0 + tearResistance: 1 + - particle1: 173 + particle2: 174 + restLength: 0.11634967 + constraintForce: 0 + tearResistance: 1 + - particle1: 174 + particle2: 175 + restLength: 0.11650062 + constraintForce: 0 + tearResistance: 1 + - particle1: 175 + particle2: 176 + restLength: 0.11651943 + constraintForce: 0 + tearResistance: 1 + - particle1: 176 + particle2: 177 + restLength: 0.11646894 + constraintForce: 0 + tearResistance: 1 + - particle1: 177 + particle2: 178 + restLength: 0.11646836 + constraintForce: 0 + tearResistance: 1 + - particle1: 178 + particle2: 179 + restLength: 0.11656151 + constraintForce: 0 + tearResistance: 1 + - particle1: 179 + particle2: 180 + restLength: 0.11671458 + constraintForce: 0 + tearResistance: 1 + - particle1: 180 + particle2: 181 + restLength: 0.11685168 + constraintForce: 0 + tearResistance: 1 + - particle1: 181 + particle2: 182 + restLength: 0.11689511 + constraintForce: 0 + tearResistance: 1 + - particle1: 182 + particle2: 183 + restLength: 0.1167252 + constraintForce: 0 + tearResistance: 1 + - particle1: 183 + particle2: 184 + restLength: 0.11671828 + constraintForce: 0 + tearResistance: 1 + - particle1: 184 + particle2: 185 + restLength: 0.11685561 + constraintForce: 0 + tearResistance: 1 + - particle1: 185 + particle2: 186 + restLength: 0.11681989 + constraintForce: 0 + tearResistance: 1 + - particle1: 186 + particle2: 187 + restLength: 0.11662538 + constraintForce: 0 + tearResistance: 1 + - particle1: 187 + particle2: 188 + restLength: 0.11642074 + constraintForce: 0 + tearResistance: 1 + - particle1: 188 + particle2: 189 + restLength: 0.117048115 + constraintForce: 0 + tearResistance: 1 + - particle1: 189 + particle2: 190 + restLength: 0.11699504 + constraintForce: 0 + tearResistance: 1 + - particle1: 190 + particle2: 191 + restLength: 0.11687661 + constraintForce: 0 + tearResistance: 1 + - particle1: 191 + particle2: 192 + restLength: 0.11661551 + constraintForce: 0 + tearResistance: 1 + - particle1: 192 + particle2: 193 + 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 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0.02 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &648289280 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 648289270} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 011ecd7e601cf4613b5b59bfd9d70895, type: 3} + m_Name: + m_EditorClassIdentifier: + category: 0 +--- !u!1 &949374097 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 949374099} + - component: {fileID: 949374098} + m_Layer: 0 + m_Name: BurstCollisionWorld + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &949374098 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 949374097} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} + m_Name: + m_EditorClassIdentifier: + 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: 949374097} + 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 &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_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 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} + 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!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: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.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_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1175446146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + 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 &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: 1346965647} + - component: {fileID: 1346965646} + - component: {fileID: 1346965643} + - component: {fileID: 1346965648} + - component: {fileID: 1346965649} + - 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: 260100002701000028010000290100002a0100002b0100002c0100002d0100002e0100002f010000300100003101000032010000330100003401000035010000360100003701000038010000390100003a0100003b0100003c0100003d0100003e0100003f010000400100004101000042010000430100004401000045010000460100004701000048010000490100004a0100004b0100004c0100004d0100004e0100004f010000500100005101000052010000530100005401000055010000560100005701000058010000590100005a0100005b0100005c0100005d0100005e0100005f010000600100006101000062010000630100006401000065010000660100006701000068010000690100006a0100006b0100006c0100006d0100006e0100006f010000700100007101000072010000730100007401000075010000760100007701000078010000790100007a0100007b0100007c0100007d0100007e0100007f010000800100008101000082010000830100008401000085010000860100008701000088010000890100008a0100008b0100008c0100008d0100008e0100008f010000900100009101000092010000930100009401000095010000960100009701000098010000990100009a0100009b0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a8010000a9010000aa010000ab010000ac010000ad010000ae010000af010000b0010000b1010000b2010000b3010000b4010000b5010000b6010000b7010000b8010000 + m_AlignBytes: 16 + groupID: 3 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 1 + m_SelfCollisions: 1 + restLength_: 5.39185 + elements: + - particle1: 294 + particle2: 295 + restLength: 0.11771238 + constraintForce: 0 + tearResistance: 1 + - particle1: 295 + particle2: 296 + restLength: 0.11794325 + constraintForce: 0 + tearResistance: 1 + - particle1: 296 + particle2: 297 + restLength: 0.117595166 + constraintForce: 0 + tearResistance: 1 + - particle1: 297 + particle2: 298 + restLength: 0.11768351 + constraintForce: 0 + tearResistance: 1 + - particle1: 298 + particle2: 299 + restLength: 0.11783673 + constraintForce: 0 + tearResistance: 1 + - particle1: 299 + particle2: 300 + restLength: 0.117969744 + constraintForce: 0 + tearResistance: 1 + - particle1: 300 + particle2: 301 + restLength: 0.11802316 + constraintForce: 0 + tearResistance: 1 + - particle1: 301 + particle2: 302 + restLength: 0.11796464 + constraintForce: 0 + tearResistance: 1 + - particle1: 302 + particle2: 303 + restLength: 0.1178521 + constraintForce: 0 + tearResistance: 1 + - particle1: 303 + particle2: 304 + restLength: 0.117975526 + constraintForce: 0 + tearResistance: 1 + - particle1: 304 + particle2: 305 + restLength: 0.11801252 + constraintForce: 0 + tearResistance: 1 + - particle1: 305 + particle2: 306 + restLength: 0.11794836 + constraintForce: 0 + tearResistance: 1 + - particle1: 306 + particle2: 307 + restLength: 0.11783 + constraintForce: 0 + tearResistance: 1 + - particle1: 307 + particle2: 308 + restLength: 0.117713265 + constraintForce: 0 + tearResistance: 1 + - particle1: 308 + particle2: 309 + restLength: 0.117651865 + constraintForce: 0 + tearResistance: 1 + - particle1: 309 + particle2: 310 + restLength: 0.117673375 + constraintForce: 0 + tearResistance: 1 + - particle1: 310 + particle2: 311 + restLength: 0.117791526 + constraintForce: 0 + tearResistance: 1 + - particle1: 311 + particle2: 312 + restLength: 0.11774277 + constraintForce: 0 + tearResistance: 1 + - particle1: 312 + particle2: 313 + restLength: 0.11769215 + constraintForce: 0 + tearResistance: 1 + - particle1: 313 + particle2: 314 + restLength: 0.11750718 + constraintForce: 0 + tearResistance: 1 + - particle1: 314 + particle2: 315 + restLength: 0.11741844 + constraintForce: 0 + tearResistance: 1 + - particle1: 315 + particle2: 316 + restLength: 0.1176177 + constraintForce: 0 + tearResistance: 1 + - particle1: 316 + particle2: 317 + restLength: 0.11827736 + constraintForce: 0 + tearResistance: 1 + - particle1: 317 + particle2: 318 + restLength: 0.11706203 + constraintForce: 0 + tearResistance: 1 + - particle1: 318 + particle2: 319 + restLength: 0.11636803 + constraintForce: 0 + tearResistance: 1 + - particle1: 319 + particle2: 320 + restLength: 0.11621493 + constraintForce: 0 + tearResistance: 1 + - particle1: 320 + particle2: 321 + restLength: 0.11634967 + constraintForce: 0 + tearResistance: 1 + - particle1: 321 + particle2: 322 + restLength: 0.11650062 + constraintForce: 0 + tearResistance: 1 + - particle1: 322 + particle2: 323 + restLength: 0.11651943 + constraintForce: 0 + tearResistance: 1 + - particle1: 323 + particle2: 324 + restLength: 0.11646894 + constraintForce: 0 + tearResistance: 1 + - particle1: 324 + particle2: 325 + restLength: 0.11646836 + constraintForce: 0 + tearResistance: 1 + - particle1: 325 + particle2: 326 + restLength: 0.11656151 + constraintForce: 0 + tearResistance: 1 + - particle1: 326 + particle2: 327 + restLength: 0.11671458 + constraintForce: 0 + tearResistance: 1 + - particle1: 327 + particle2: 328 + restLength: 0.11685168 + constraintForce: 0 + tearResistance: 1 + - particle1: 328 + particle2: 329 + restLength: 0.11689511 + constraintForce: 0 + tearResistance: 1 + - particle1: 329 + particle2: 330 + restLength: 0.1167252 + constraintForce: 0 + tearResistance: 1 + - particle1: 330 + particle2: 331 + restLength: 0.11671828 + constraintForce: 0 + tearResistance: 1 + - particle1: 331 + particle2: 332 + restLength: 0.11685561 + constraintForce: 0 + tearResistance: 1 + - particle1: 332 + particle2: 333 + restLength: 0.11681989 + constraintForce: 0 + tearResistance: 1 + - particle1: 333 + particle2: 334 + restLength: 0.11662538 + constraintForce: 0 + tearResistance: 1 + - particle1: 334 + particle2: 335 + restLength: 0.11642074 + constraintForce: 0 + tearResistance: 1 + - particle1: 335 + particle2: 336 + restLength: 0.117048115 + constraintForce: 0 + tearResistance: 1 + - particle1: 336 + particle2: 337 + restLength: 0.11699504 + constraintForce: 0 + tearResistance: 1 + - particle1: 337 + particle2: 338 + restLength: 0.11687661 + constraintForce: 0 + tearResistance: 1 + - particle1: 338 + particle2: 339 + restLength: 0.11661551 + constraintForce: 0 + tearResistance: 1 + - particle1: 339 + particle2: 340 + 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 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0.02 + _maxBending: 0.025 + _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: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1346965642} + m_Target: {fileID: 1346965650} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !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: 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 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &1346965647 +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.05 + smoothing: 1 + twist: 0 + indexInSystem: 1 +--- !u!114 &1346965648 +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: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1346965642} + m_Target: {fileID: 1346965650} + m_ParticleGroup: {fileID: -8864857226987616246, guid: f92460ac39eb444ad8f2bfb5714bb425, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1346965649 +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: 88cb6f64c607f46b3b0d7a30a99ed18b, type: 3} + m_Name: + m_EditorClassIdentifier: + cam: {fileID: 1002464895} +--- !u!4 &1346965650 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1346965641} + 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: + 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: 011ecd7e601cf4613b5b59bfd9d70895, type: 3} + m_Name: + m_EditorClassIdentifier: + category: 0 +--- !u!850595691 &1570830420 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Settings.lighting + serializedVersion: 4 + 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_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_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 + m_PVRTiledBaking: 0 +--- !u!1 &1896057539 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1896057543} + - component: {fileID: 1896057542} + - component: {fileID: 1896057541} + - component: {fileID: 1896057540} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1896057540 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1896057539} + 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 &1896057541 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1896057539} + 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 &1896057542 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1896057539} + 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_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1896057543 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1896057539} + 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: 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 &2009578510 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2009578511} + - component: {fileID: 2009578513} + - component: {fileID: 2009578512} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2009578511 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2009578510} + 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} + m_AnchoredPosition: {x: 103, y: 26} + m_SizeDelta: {x: 160, y: 23.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2009578512 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2009578510} + 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 to cut the ropes. +--- !u!222 &2009578513 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2009578510} + m_CullTransparentMesh: 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: 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 + colliderCCD: 1 + particleCCD: 0 + shockPropagation: 0 + surfaceCollisionIterations: 8 + surfaceCollisionTolerance: 0.01 + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + maxFoamVelocityStretch: 0.3 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + 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: 2 + SORFactor: 1 + enabled: 1 + particleFrictionConstraintParameters: + evaluationOrder: 1 + iterations: 2 + 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: 5 + SORFactor: 1 + enabled: 0 + stitchConstraintParameters: + evaluationOrder: 0 + 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} + 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} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeCutting.unity.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeCutting.unity.meta new file mode 100644 index 00000000..506365ec --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeCutting.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 14b5ad4d00c9f4b118c479057ad1a580 +labels: +- ObiRope +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHook.unity b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHook.unity new file mode 100644 index 00000000..9642c2a2 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHook.unity @@ -0,0 +1,1459 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 4890085278179872738, guid: 6530f45834fcb41a0b4b10b622d95c4c, type: 2} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &694935029 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 694935034} + - component: {fileID: 694935033} + - component: {fileID: 694935032} + - component: {fileID: 694935031} + - component: {fileID: 694935030} + m_Layer: 0 + m_Name: Cube (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &694935030 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 694935029} + 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: 694935032} + m_DistanceField: {fileID: 0} +--- !u!23 &694935031 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 694935029} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &694935032 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 694935029} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &694935033 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 694935029} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &694935034 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 694935029} + 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: + 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_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 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} + 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: + 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_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_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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + 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} + 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: + 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: 1201433691} + m_Layer: 0 + m_Name: Hook + 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} + 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: + 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: b77478c97cefb4dec9cc85236f7c5fca, type: 3} + m_Name: + m_EditorClassIdentifier: + solver: {fileID: 2108375382} + character: {fileID: 1247776995} + material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + hookResolution: 0.5 + hookExtendRetractSpeed: 4 + hookShootSpeed: 30 + particlePoolSize: 100 +--- !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} + 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: 2 + m_Mass: 2 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 120 + 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_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_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_IsTrigger: 0 + m_Enabled: 1 + 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} + 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: + 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: + acceleration: 20 + maxSpeed: 10 + jumpPower: 6 + floorRaycastDistance: 1.2 +--- !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: -131071 + m_SourceCollider: {fileID: 1247776990} + m_DistanceField: {fileID: 0} +--- !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_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 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. + + Left mouse button to launch the hook. + Click again to release it. + + When the hook is attached, change its length + 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 &1641461104 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1641461108} + - component: {fileID: 1641461107} + - component: {fileID: 1641461106} + - component: {fileID: 1641461105} + - component: {fileID: 1641461109} + m_Layer: 0 + m_Name: Cube (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1641461105 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1641461104} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1641461106 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1641461104} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1641461107 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1641461104} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1641461108 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1641461104} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1641461104} + 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: 1641461106} + m_DistanceField: {fileID: 0} +--- !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_RootOrder: 1 + 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_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_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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + 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} + 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: + 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 &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: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.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_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1954069166 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1954069164} + 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: + 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_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_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 &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: 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 + colliderCCD: 1 + particleCCD: 0 + shockPropagation: 0 + surfaceCollisionIterations: 8 + surfaceCollisionTolerance: 0.005 + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + maxFoamVelocityStretch: 0.3 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + 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: 3 + SORFactor: 1 + enabled: 0 + 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 + 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} + 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} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHook.unity.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHook.unity.meta new file mode 100644 index 00000000..c2a52198 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHook.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f403f5793cdb042dc8552ea3329b7bfa +labels: +- ObiRope +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHookSettings.lighting b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHookSettings.lighting new file mode 100644 index 00000000..8fc6c5a6 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHookSettings.lighting @@ -0,0 +1,64 @@ +%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: RopeGrapplingHookSettings + serializedVersion: 4 + m_GIWorkflowMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 1 + m_BakeBackend: 0 + m_LightmapMaxSize: 1024 + 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_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_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 + m_PVRTiledBaking: 0 diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHookSettings.lighting.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHookSettings.lighting.meta new file mode 100644 index 00000000..d414d9ab --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHookSettings.lighting.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6530f45834fcb41a0b4b10b622d95c4c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4890085278179872738 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeNet.unity b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeNet.unity new file mode 100644 index 00000000..c9b69f7d --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeNet.unity @@ -0,0 +1,506 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 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: 752305721} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &65402943 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + 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_LocalScale.x + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalScale.y + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalScale.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalPosition.x + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + propertyPath: m_LocalPosition.y + value: -5 + 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_SourcePrefab: {fileID: 100100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} +--- !u!1 &65402944 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} + m_PrefabInstance: {fileID: 65402943} + m_PrefabAsset: {fileID: 0} +--- !u!114 &65402945 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 65402944} + 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: 65402946} + m_DistanceField: {fileID: 11400000, guid: 5eb5ff1af3a3f4a14977448198c232ae, type: 2} +--- !u!64 &65402946 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 65402944} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 4300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} +--- !u!1 &335576535 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 335576538} + - component: {fileID: 335576537} + - component: {fileID: 335576536} + 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 &335576536 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 335576535} + m_Enabled: 1 +--- !u!20 &335576537 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 335576535} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -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 &335576538 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 335576535} + 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: 4 + 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_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_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 + m_PVRTiledBaking: 0 +--- !u!1 &1750272832 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1750272834} + - component: {fileID: 1750272833} + 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 &1750272833 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1750272832} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1750272834 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1750272832} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2144190321} + - component: {fileID: 2144190320} + m_Layer: 0 + m_Name: NetGenerator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2144190320 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2144190319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83e341aa1a9a14825ab84ad04cd5f44c, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 4cc7d840058664f0f9a679178b33b5e4, type: 2} + resolution: {x: 4, y: 4} + size: {x: 2, y: 2} + nodeSize: 0.2 +--- !u!4 &2144190321 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2144190319} + 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} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeNet.unity.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeNet.unity.meta new file mode 100644 index 00000000..b889597a --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeNet.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 68709b54f964a4ab8bc457f533eeeb91 +labels: +- ObiRope +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeShowcase.unity b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeShowcase.unity new file mode 100644 index 00000000..a0813fe1 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeShowcase.unity @@ -0,0 +1,2754 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + 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: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &11813904 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 11813905} + - component: {fileID: 11813908} + - component: {fileID: 11813907} + - component: {fileID: 11813906} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &11813905 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11813904} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11813904} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &11813907 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11813904} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &11813908 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11813904} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &206877714 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 206877718} + - component: {fileID: 206877717} + - component: {fileID: 206877716} + - component: {fileID: 206877715} + - component: {fileID: 206877719} + - component: {fileID: 206877720} + 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 &206877715 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 206877714} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &206877716 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 206877714} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &206877717 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 206877714} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &206877718 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 206877714} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 206877714} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b63f5717a039e488ab8ccfb80eda50e6, type: 3} + m_Name: + m_EditorClassIdentifier: + highlightColor: {r: 1, g: 0, b: 0, a: 1} +--- !u!114 &206877720 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 206877714} + 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: 206877716} + m_DistanceField: {fileID: 0} +--- !u!1 &256028320 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 256028324} + - component: {fileID: 256028323} + - component: {fileID: 256028322} + - component: {fileID: 256028321} + - component: {fileID: 256028325} + - component: {fileID: 256028326} + 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 &256028321 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256028320} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &256028322 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256028320} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &256028323 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256028320} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &256028324 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256028320} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256028320} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b63f5717a039e488ab8ccfb80eda50e6, type: 3} + m_Name: + m_EditorClassIdentifier: + highlightColor: {r: 0.07586217, g: 1, b: 0, a: 1} +--- !u!114 &256028326 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 256028320} + 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: 256028322} + m_DistanceField: {fileID: 0} +--- !u!1 &283112602 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 283112603} + - component: {fileID: 283112605} + - component: {fileID: 283112604} + - component: {fileID: 283112606} + - component: {fileID: 283112610} + - component: {fileID: 283112609} + 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 &283112603 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 283112602} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 283112602} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 283112606} + m_Target: {fileID: 1872762459} + m_ParticleGroup: {fileID: -8864857226987616246, guid: 9d8ad1e0aac8f48deb9f3cda92974152, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &283112605 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 283112602} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 283112606} + m_Target: {fileID: 11813905} + m_ParticleGroup: {fileID: -2639811391673711616, guid: 9d8ad1e0aac8f48deb9f3cda92974152, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &283112606 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 283112602} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f00000070000000710000007200000073000000740000007500000076000000770000007800000079000000 + m_AlignBytes: 16 + groupID: 1 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_SelfCollisions: 0 + restLength_: 4.014817 + elements: + - particle1: 0 + particle2: 1 + restLength: 0.19104075 + constraintForce: 0 + tearResistance: 1 + - particle1: 1 + particle2: 2 + restLength: 0.18882072 + constraintForce: 0 + tearResistance: 1 + - particle1: 2 + particle2: 3 + restLength: 0.19130969 + constraintForce: 0 + tearResistance: 1 + - particle1: 3 + particle2: 4 + restLength: 0.19190359 + constraintForce: 0 + tearResistance: 1 + - particle1: 4 + particle2: 5 + restLength: 0.19226003 + constraintForce: 0 + tearResistance: 1 + - particle1: 5 + particle2: 6 + restLength: 0.19104254 + constraintForce: 0 + tearResistance: 1 + - particle1: 6 + particle2: 7 + restLength: 0.19071305 + constraintForce: 0 + tearResistance: 1 + - particle1: 7 + particle2: 8 + restLength: 0.19154373 + constraintForce: 0 + tearResistance: 1 + - particle1: 8 + particle2: 9 + restLength: 0.19181116 + constraintForce: 0 + tearResistance: 1 + - particle1: 9 + particle2: 10 + restLength: 0.19124432 + constraintForce: 0 + tearResistance: 1 + - particle1: 10 + particle2: 11 + restLength: 0.19148356 + constraintForce: 0 + tearResistance: 1 + - particle1: 11 + particle2: 12 + restLength: 0.1915547 + constraintForce: 0 + tearResistance: 1 + - particle1: 12 + particle2: 13 + restLength: 0.19083694 + constraintForce: 0 + tearResistance: 1 + - particle1: 13 + particle2: 14 + restLength: 0.1917516 + constraintForce: 0 + tearResistance: 1 + - particle1: 14 + particle2: 15 + restLength: 0.19204319 + constraintForce: 0 + tearResistance: 1 + - particle1: 15 + particle2: 16 + restLength: 0.19159764 + constraintForce: 0 + tearResistance: 1 + - particle1: 16 + particle2: 17 + restLength: 0.19113648 + constraintForce: 0 + tearResistance: 1 + - particle1: 17 + particle2: 18 + restLength: 0.19116187 + constraintForce: 0 + tearResistance: 1 + - particle1: 18 + particle2: 19 + restLength: 0.19208884 + constraintForce: 0 + tearResistance: 1 + - particle1: 19 + particle2: 20 + restLength: 0.19226182 + constraintForce: 0 + tearResistance: 1 + - particle1: 20 + particle2: 21 + 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 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0 + _maxBending: 0.04 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &283112609 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 283112602} + 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: 6} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &283112610 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 283112602} + 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!1001 &421764872 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + 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_SourcePrefab: {fileID: 100100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} +--- !u!1 &458966907 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 458966911} + - component: {fileID: 458966910} + - component: {fileID: 458966909} + - component: {fileID: 458966908} + - component: {fileID: 458966912} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &458966908 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 458966907} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &458966909 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 458966907} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &458966910 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 458966907} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &458966911 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 458966907} + 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: 5 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 458966907} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: 6081905a3b44e41268651052f0230595, type: 2} + m_CullingMode: 0 + m_UpdateMode: 1 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + 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 &515194302 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 515194303} + - component: {fileID: 515194304} + m_Layer: 0 + m_Name: Bending + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &515194303 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 515194302} + 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: 5 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 515194302} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: 3944bed00b7b34420a9a4cfad30c9ce0, type: 2} + m_CullingMode: 0 + m_UpdateMode: 1 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 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} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 656652124} + - component: {fileID: 656652123} + - component: {fileID: 656652122} + - component: {fileID: 656652121} + - component: {fileID: 656652125} + - component: {fileID: 656652126} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &656652121 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 656652120} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!135 &656652122 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 656652120} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &656652123 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 656652120} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &656652124 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 656652120} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 656652120} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b63f5717a039e488ab8ccfb80eda50e6, type: 3} + m_Name: + m_EditorClassIdentifier: + highlightColor: {r: 0, g: 0.5862069, b: 1, a: 1} +--- !u!114 &656652126 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 656652120} + 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: 656652122} + m_DistanceField: {fileID: 0} +--- !u!1 &913365224 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 913365225} + - component: {fileID: 913365226} + - component: {fileID: 913365231} + - component: {fileID: 913365228} + - component: {fileID: 913365227} + - component: {fileID: 913365232} + m_Layer: 10 + m_Name: Obi Rope Flaccid + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &913365225 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 913365224} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 913365224} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 7a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000a0000000a1000000a2000000a3000000a4000000a5000000a6000000a7000000a8000000a9000000aa000000ab000000ac000000ad000000ae000000af000000b0000000b1000000b2000000b3000000b4000000b5000000b6000000b7000000b8000000b9000000ba000000bb000000bc000000bd000000be000000bf000000c0000000c1000000c2000000c3000000c4000000c5000000c6000000c7000000c8000000c9000000ca000000cb000000cc000000cd000000ce000000cf000000d0000000d1000000d2000000d3000000d4000000d5000000d6000000d7000000d8000000d9000000da000000db000000dc000000dd000000de000000df000000e0000000e1000000e2000000e3000000e4000000e5000000e6000000e7000000e8000000e9000000 + m_AlignBytes: 16 + groupID: 2 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 122 + particle2: 123 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 123 + particle2: 124 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 124 + particle2: 125 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 125 + particle2: 126 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 126 + particle2: 127 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 127 + particle2: 128 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 128 + particle2: 129 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 129 + particle2: 130 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 130 + particle2: 131 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 131 + particle2: 132 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 132 + particle2: 133 + 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.04 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &913365227 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 913365224} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 913365226} + m_Target: {fileID: 913365225} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &913365228 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 913365224} + 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: 6} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &913365231 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 913365224} + 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 &913365232 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 913365224} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 913365226} + m_Target: {fileID: 913365225} + m_ParticleGroup: {fileID: 8225853497016287227, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !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_RootOrder: 0 + 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_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 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} + 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!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_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_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 &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: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.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_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1175446146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + 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 &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} + 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: + 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: ea000000eb000000ec000000ed000000ee000000ef000000f0000000f1000000f2000000f3000000f4000000f5000000f6000000f7000000f8000000f9000000fa000000fb000000fc000000fd000000fe000000ff000000000100000101000002010000030100000401000005010000060100000701000008010000090100000a0100000b0100000c0100000d0100000e0100000f010000100100001101000012010000130100001401000015010000160100001701000018010000190100001a0100001b0100001c0100001d0100001e0100001f010000200100002101000022010000230100002401000025010000260100002701000028010000290100002a0100002b0100002c0100002d0100002e0100002f010000300100003101000032010000330100003401000035010000360100003701000038010000390100003a0100003b0100003c0100003d0100003e0100003f010000400100004101000042010000430100004401000045010000460100004701000048010000490100004a0100004b0100004c0100004d0100004e0100004f01000050010000510100005201000053010000540100005501000056010000570100005801000059010000 + m_AlignBytes: 16 + groupID: 3 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 234 + particle2: 235 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 235 + particle2: 236 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 236 + particle2: 237 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 237 + particle2: 238 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 238 + particle2: 239 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 239 + particle2: 240 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 240 + particle2: 241 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 241 + particle2: 242 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 242 + particle2: 243 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 243 + particle2: 244 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 244 + particle2: 245 + 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_Compliance: 0 + m_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: 6} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 1 +--- !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: 2 +--- !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: 1346965647} + - component: {fileID: 1346965646} + - component: {fileID: 1346965643} + - component: {fileID: 1346965648} + m_Layer: 10 + m_Name: Obi Rope Rigid + 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: 5a0100005b0100005c0100005d0100005e0100005f010000600100006101000062010000630100006401000065010000660100006701000068010000690100006a0100006b0100006c0100006d0100006e0100006f010000700100007101000072010000730100007401000075010000760100007701000078010000790100007a0100007b0100007c0100007d0100007e0100007f010000800100008101000082010000830100008401000085010000860100008701000088010000890100008a0100008b0100008c0100008d0100008e0100008f010000900100009101000092010000930100009401000095010000960100009701000098010000990100009a0100009b0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a8010000a9010000aa010000ab010000ac010000ad010000ae010000af010000b0010000b1010000b2010000b3010000b4010000b5010000b6010000b7010000b8010000b9010000ba010000bb010000bc010000bd010000be010000bf010000c0010000c1010000c2010000c3010000c4010000c5010000c6010000c7010000c8010000c9010000 + m_AlignBytes: 16 + groupID: 4 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 346 + particle2: 347 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 347 + particle2: 348 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 348 + particle2: 349 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 349 + particle2: 350 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 350 + particle2: 351 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 351 + particle2: 352 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 352 + particle2: 353 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 353 + particle2: 354 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 354 + particle2: 355 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 355 + particle2: 356 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 356 + particle2: 357 + 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 + _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: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1346965642} + m_Target: {fileID: 1346965650} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !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: 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!114 &1346965647 +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: 3 +--- !u!114 &1346965648 +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: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1346965642} + m_Target: {fileID: 1346965650} + m_ParticleGroup: {fileID: 8225853497016287227, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!4 &1346965650 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1346965641} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1376993203} + m_Layer: 0 + m_Name: Circuit + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1376993203 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1376993202} + 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!1 &1415489121 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1415489122} + m_Layer: 0 + m_Name: Hanger + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1415489122 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1415489121} + 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 &1742644163 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1742644164} + - component: {fileID: 1742644165} + - component: {fileID: 1742644170} + - component: {fileID: 1742644167} + - component: {fileID: 1742644166} + - component: {fileID: 1742644171} + m_Layer: 10 + m_Name: Obi Rope Flexible + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1742644164 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1742644163} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1742644163} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: ca010000cb010000cc010000cd010000ce010000cf010000d0010000d1010000d2010000d3010000d4010000d5010000d6010000d7010000d8010000d9010000da010000db010000dc010000dd010000de010000df010000e0010000e1010000e2010000e3010000e4010000e5010000e6010000e7010000e8010000e9010000ea010000eb010000ec010000ed010000ee010000ef010000f0010000f1010000f2010000f3010000f4010000f5010000f6010000f7010000f8010000f9010000fa010000fb010000fc010000fd010000fe010000ff010000000200000102000002020000030200000402000005020000060200000702000008020000090200000a0200000b0200000c0200000d0200000e0200000f020000100200001102000012020000130200001402000015020000160200001702000018020000190200001a0200001b0200001c0200001d0200001e0200001f020000200200002102000022020000230200002402000025020000260200002702000028020000290200002a0200002b0200002c0200002d0200002e0200002f02000030020000310200003202000033020000340200003502000036020000370200003802000039020000 + m_AlignBytes: 16 + groupID: 5 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_SelfCollisions: 0 + restLength_: 2 + elements: + - particle1: 458 + particle2: 459 + restLength: 0.18133646 + constraintForce: 0 + tearResistance: 1 + - particle1: 459 + particle2: 460 + restLength: 0.18116945 + constraintForce: 0 + tearResistance: 1 + - particle1: 460 + particle2: 461 + restLength: 0.18210343 + constraintForce: 0 + tearResistance: 1 + - particle1: 461 + particle2: 462 + restLength: 0.18220028 + constraintForce: 0 + tearResistance: 1 + - particle1: 462 + particle2: 463 + restLength: 0.18192291 + constraintForce: 0 + tearResistance: 1 + - particle1: 463 + particle2: 464 + restLength: 0.18203682 + constraintForce: 0 + tearResistance: 1 + - particle1: 464 + particle2: 465 + restLength: 0.18204802 + constraintForce: 0 + tearResistance: 1 + - particle1: 465 + particle2: 466 + restLength: 0.18179289 + constraintForce: 0 + tearResistance: 1 + - particle1: 466 + particle2: 467 + restLength: 0.18189213 + constraintForce: 0 + tearResistance: 1 + - particle1: 467 + particle2: 468 + restLength: 0.18271154 + constraintForce: 0 + tearResistance: 1 + - particle1: 468 + particle2: 469 + 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 &1742644166 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1742644163} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1742644165} + m_Target: {fileID: 1742644164} + m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1742644167 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1742644163} + 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: 6} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &1742644170 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1742644163} + 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 &1742644171 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1742644163} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1742644165} + m_Target: {fileID: 1742644164} + m_ParticleGroup: {fileID: 8225853497016287227, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!1 &1872762458 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1872762459} + - component: {fileID: 1872762462} + - component: {fileID: 1872762461} + - component: {fileID: 1872762460} + - component: {fileID: 1872762463} + 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 &1872762459 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1872762458} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1872762458} + 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: 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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1872762461 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1872762458} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1872762462 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1872762458} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!95 &1872762463 +Animator: + serializedVersion: 5 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1872762458} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: a4b784adeafc54c718a457f939eec638, type: 2} + m_CullingMode: 0 + m_UpdateMode: 1 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 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: 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.001 + maxVelocity: 50 + maxAngularVelocity: 10 + collisionMargin: 0.02 + maxDepenetration: 10 + colliderCCD: 1 + particleCCD: 0 + shockPropagation: 0 + surfaceCollisionIterations: 8 + surfaceCollisionTolerance: 0.005 + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + maxFoamVelocityStretch: 0.3 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + 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 + 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} + 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: + 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: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeShowcase.unity.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeShowcase.unity.meta new file mode 100644 index 00000000..a34c4681 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeShowcase.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 89e5ccc1fe8f948e195777194be0d7ee +labels: +- ObiRope +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeShowcaseSettings.lighting b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeShowcaseSettings.lighting new file mode 100644 index 00000000..3ff82780 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeShowcaseSettings.lighting @@ -0,0 +1,64 @@ +%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: RopeShowcaseSettings + serializedVersion: 4 + 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_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_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 + m_PVRTiledBaking: 0 diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeShowcaseSettings.lighting.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeShowcaseSettings.lighting.meta new file mode 100644 index 00000000..ce3742d8 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/RopeShowcaseSettings.lighting.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d03718b1550344932a85912567fb2a98 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4890085278179872738 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources.meta new file mode 100644 index 00000000..b076486f --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eac720611ce5c4119b1d9db820e46445 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations.meta new file mode 100644 index 00000000..d3211a3f --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bce64c6a145eb4fe6baa4b578340c7f6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/BenderAnimation.anim b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/BenderAnimation.anim new file mode 100644 index 00000000..9cb4c178 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/BenderAnimation.anim @@ -0,0 +1,205 @@ +%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: BenderAnimation + 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: -4.998, y: 2.323, z: 2.77} + 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: 3 + value: {x: -4.998, y: 3.22, z: 2.77} + 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: 3.2666667 + value: {x: -4.998, y: 2.323, z: 2.77} + 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 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 3.2666667 + 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: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -4.998 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3 + value: -4.998 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3.2666667 + value: -4.998 + 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} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 2.323 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3 + value: 3.22 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3.2666667 + value: 2.323 + 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} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 2.77 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3 + value: 2.77 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3.2666667 + value: 2.77 + 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} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 1 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/BenderAnimation.anim.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/BenderAnimation.anim.meta new file mode 100644 index 00000000..c717d2f3 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/BenderAnimation.anim.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 8aef55aace3b1432fa898df59e010a72 +labels: +- ObiRope +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Bending.controller b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Bending.controller new file mode 100644 index 00000000..7c551754 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Bending.controller @@ -0,0 +1,72 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Bending + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 1107706386461285292} + 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} +--- !u!1102 &1102167745598837238 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: BenderAnimation + 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: 8aef55aace3b1432fa898df59e010a72, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1107 &1107706386461285292 +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: 1102167745598837238} + m_Position: {x: 264, 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: 1102167745598837238} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Bending.controller.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Bending.controller.meta new file mode 100644 index 00000000..17ba600e --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Bending.controller.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3944bed00b7b34420a9a4cfad30c9ce0 +labels: +- ObiRope +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Obi Rod.controller b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Obi Rod.controller new file mode 100644 index 00000000..f1c10f9b --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Obi Rod.controller @@ -0,0 +1,72 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Obi Rod + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 1107378561553032024} + 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} +--- !u!1102 &1102093698268689078 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: SpringBase + 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: f9f087beac1af4afbb7df6053cc98576, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1107 &1107378561553032024 +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: 1102093698268689078} + m_Position: {x: 200, y: 0, 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: 1102093698268689078} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Obi Rod.controller.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Obi Rod.controller.meta new file mode 100644 index 00000000..34a24fd0 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Obi Rod.controller.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0f15fe98c8c39495c86f63837900a88d +labels: +- ObiRope +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwister.anim b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwister.anim new file mode 100644 index 00000000..595dbdc6 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwister.anim @@ -0,0 +1,819 @@ +%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: PlectonemeTwister + serializedVersion: 7 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 0, y: 0, z: 0} + 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: 1 + value: {x: 90, y: 0, z: 0} + inSlope: {x: 90, y: 0, z: 0} + outSlope: {x: 90, 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: 2 + value: {x: 180, y: 0, z: 0} + inSlope: {x: 90, y: 0, z: 0} + outSlope: {x: 90, 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: 3 + value: {x: 270, y: 0, z: 0} + inSlope: {x: 89.25619, y: 0, z: 0} + outSlope: {x: 89.25619, 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.016667 + value: {x: 360, y: 0, z: 0} + inSlope: {x: 90, y: 0, z: 0} + outSlope: {x: 90, 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: 5 + value: {x: 450, y: 0, z: 0} + inSlope: {x: 90.75631, y: 0, z: 0} + outSlope: {x: 90.75631, 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: 6 + value: {x: 540, y: 0, z: 0} + inSlope: {x: 90, y: 0, z: 0} + outSlope: {x: 90, 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: 7 + value: {x: 630, y: 0, z: 0} + inSlope: {x: 89.25621, y: 0, z: 0} + outSlope: {x: 89.25621, 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: 720, y: 0, z: 0} + inSlope: {x: 90, y: 0, z: 0} + outSlope: {x: 90, 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: 9 + value: {x: 810, y: 0, z: 0} + inSlope: {x: 90, y: 0, z: 0} + outSlope: {x: 90, 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: 10.016666 + value: {x: 900, y: 0, z: 0} + inSlope: {x: 90, y: 0, z: 0} + outSlope: {x: 90, 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: 11 + value: {x: 990, y: 0, z: 0} + inSlope: {x: 90.756294, y: 0, z: 0} + outSlope: {x: 90.756294, 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: 12 + value: {x: 1080, y: 0, z: 0} + 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: 13.983334 + value: {x: 0, y: 0, z: 0} + 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_PositionCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 1.021031, y: 2.82, z: 0} + 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: 9 + value: {x: -0.5, y: 2.82, z: 0} + 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: 12 + value: {x: -0.5, y: 2.82, z: 0} + 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: 13.983334 + value: {x: 1.021031, y: 2.82, z: 0} + 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 + - serializedVersion: 2 + path: 0 + attribute: 4 + script: {fileID: 0} + typeID: 4 + customType: 4 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 13.983334 + 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: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1.021031 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 9 + value: -0.5 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 12 + value: -0.5 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 13.983334 + value: 1.021031 + 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} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 2.82 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 9 + value: 2.82 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 12 + value: 2.82 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 13.983334 + value: 2.82 + 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} + - 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: 9 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 12 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 13.983334 + 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.z + path: + classID: 4 + script: {fileID: 0} + - 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: 1 + value: 90 + inSlope: 90 + outSlope: 90 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 2 + value: 180 + inSlope: 90 + outSlope: 90 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3 + value: 270 + inSlope: 89.25619 + outSlope: 89.25619 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 4.016667 + value: 360 + inSlope: 90 + outSlope: 90 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 5 + value: 450 + inSlope: 90.75631 + outSlope: 90.75631 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 6 + value: 540 + inSlope: 90 + outSlope: 90 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 7 + value: 630 + inSlope: 89.25621 + outSlope: 89.25621 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 8.016666 + value: 720 + inSlope: 90 + outSlope: 90 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 9 + value: 810 + inSlope: 90 + outSlope: 90 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 10.016666 + value: 900 + inSlope: 90 + outSlope: 90 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 11 + value: 990 + inSlope: 90.756294 + outSlope: 90.756294 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 12 + value: 1080 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 13.983334 + 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: localEulerAnglesRaw.x + path: + classID: 4 + script: {fileID: 0} + - 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: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 2 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 4.016667 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 5 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 6 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 7 + 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 + - serializedVersion: 3 + time: 9 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 10.016666 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 11 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 12 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 13.983334 + 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: localEulerAnglesRaw.y + path: + classID: 4 + script: {fileID: 0} + - 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: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 2 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 4.016667 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 5 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 6 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 7 + 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 + - serializedVersion: 3 + time: 9 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 10.016666 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 11 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 12 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 13.983334 + 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: localEulerAnglesRaw.z + path: + classID: 4 + script: {fileID: 0} + m_EulerEditorCurves: + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.x + path: + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.y + path: + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.z + path: + classID: 4 + script: {fileID: 0} + m_HasGenericRootTransform: 1 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwister.anim.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwister.anim.meta new file mode 100644 index 00000000..2b0781fd --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwister.anim.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 28df4ce4afe8f4cf4ba9651b14239a6d +labels: +- ObiRope +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwisterController.controller b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwisterController.controller new file mode 100644 index 00000000..ff046420 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwisterController.controller @@ -0,0 +1,72 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: PlectonemeTwisterController + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 1107954534683742082} + 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} +--- !u!1102 &1102130930562412034 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: PlectonemeTwister + 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: 28df4ce4afe8f4cf4ba9651b14239a6d, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1107 &1107954534683742082 +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: 1102130930562412034} + m_Position: {x: 288, y: 108, 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: 1102130930562412034} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwisterController.controller.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwisterController.controller.meta new file mode 100644 index 00000000..f8124fbe --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwisterController.controller.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 97c29ef2dfc89427385f43924109cfa8 +labels: +- ObiRope +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Rocker.controller b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Rocker.controller new file mode 100644 index 00000000..9d55fd45 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Rocker.controller @@ -0,0 +1,72 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Rocker + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 1107706386461285292} + 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} +--- !u!1102 &1102167745598837238 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Rocker + 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: fe0d06ab59d084ca78e40c50472ccc36, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1107 &1107706386461285292 +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: 1102167745598837238} + m_Position: {x: 264, 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: 1102167745598837238} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Rocker.controller.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Rocker.controller.meta new file mode 100644 index 00000000..7d330dd2 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Rocker.controller.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d48cf3556d5844543a51259340bc1344 +labels: +- ObiRope +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RockerAnimation.anim b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RockerAnimation.anim new file mode 100644 index 00000000..a23b1cf7 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RockerAnimation.anim @@ -0,0 +1,277 @@ +%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: RockerAnimation + 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: 2.971, y: 2.887, z: 0} + 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: 3 + value: {x: 2.971, y: 2.887, z: 0} + 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.3333335 + value: {x: 2.971, y: 1.57, z: 0} + 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.8333335 + value: {x: 2.971, y: 1.57, z: 0} + 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: 5 + value: {x: 2.971, y: 2.887, z: 0} + 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 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 5 + 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: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 2.971 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3 + value: 2.971 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 4.3333335 + value: 2.971 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 4.8333335 + value: 2.971 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 5 + value: 2.971 + 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} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 2.887 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3 + value: 2.887 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 4.3333335 + value: 1.57 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 4.8333335 + value: 1.57 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 5 + value: 2.887 + 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} + - 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: 3 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 4.3333335 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 4.8333335 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 5 + 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.z + path: + classID: 4 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 1 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RockerAnimation.anim.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RockerAnimation.anim.meta new file mode 100644 index 00000000..fa129073 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RockerAnimation.anim.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: fe0d06ab59d084ca78e40c50472ccc36 +labels: +- ObiRope +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuit.controller b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuit.controller new file mode 100644 index 00000000..3ecbf31a --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuit.controller @@ -0,0 +1,72 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: RopeCircuit + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 1107706386461285292} + 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} +--- !u!1102 &1102167745598837238 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: RopeCircuitAnimation + 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: 272538c21c0494561b2e79be089c07ad, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1107 &1107706386461285292 +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: 1102167745598837238} + m_Position: {x: 264, 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: 1102167745598837238} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuit.controller.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuit.controller.meta new file mode 100644 index 00000000..d5fd77de --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuit.controller.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 6081905a3b44e41268651052f0230595 +labels: +- ObiRope +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuitAnimation.anim b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuitAnimation.anim new file mode 100644 index 00000000..be8e3fad --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuitAnimation.anim @@ -0,0 +1,205 @@ +%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: RopeCircuitAnimation + 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: -1.676, y: 2.471, z: -0.119} + 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: 2.762, y: 2.471, z: -0.119} + 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: -1.676, y: 2.471, z: -0.119} + 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 + 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: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1.676 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 4 + value: 2.762 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 8.016666 + value: -1.676 + 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} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 2.471 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 4 + value: 2.471 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 8.016666 + value: 2.471 + 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} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.119 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 4 + value: -0.119 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 8.016666 + value: -0.119 + 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} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 1 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuitAnimation.anim.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuitAnimation.anim.meta new file mode 100644 index 00000000..634e7ba9 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuitAnimation.anim.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 272538c21c0494561b2e79be089c07ad +labels: +- ObiRope +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeHangerAnimation.anim b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeHangerAnimation.anim new file mode 100644 index 00000000..439eca4b --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeHangerAnimation.anim @@ -0,0 +1,205 @@ +%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: RopeHangerAnimation + 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: 4.22, y: 0, z: 0} + 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: 0.8333333 + value: {x: 2.692, y: 0.001, z: 0} + 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: 1.1666666 + value: {x: 4.22, y: 0, z: 0} + 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 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 1.1666666 + 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: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 4.22 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8333333 + value: 2.692 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1.1666666 + value: 4.22 + 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} + - 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: 0.8333333 + value: 0.001 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1.1666666 + 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} + - 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: 0.8333333 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1.1666666 + 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.z + path: + classID: 4 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 1 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeHangerAnimation.anim.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeHangerAnimation.anim.meta new file mode 100644 index 00000000..bdaaebcd --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeHangerAnimation.anim.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5b3152b7fb78f42f7a1e424cfb3c8a54 +labels: +- ObiRope +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.anim b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.anim new file mode 100644 index 00000000..592dc97c --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.anim @@ -0,0 +1,205 @@ +%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: RopeStretcher + 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: 4.22, y: 0, z: 0} + 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: 1 + value: {x: 2.15, y: 0, z: 0} + 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: 1.5 + value: {x: 4.22, y: 0, z: 0} + 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 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 1.5 + 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: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 4.22 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 2.15 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1.5 + value: 4.22 + 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} + - 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: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1.5 + 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} + - 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: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1.5 + 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.z + path: + classID: 4 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 1 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.anim.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.anim.meta new file mode 100644 index 00000000..8d939d3d --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3969502aaa6a94767ba6d47311617675 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.controller b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.controller new file mode 100644 index 00000000..eea5439f --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.controller @@ -0,0 +1,72 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: RopeStretcher + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 1107706386461285292} + 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} +--- !u!1102 &1102794673975152784 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: RopeStretcher + 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: 3969502aaa6a94767ba6d47311617675, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1107 &1107706386461285292 +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: 1102794673975152784} + m_Position: {x: 300, y: 180, 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: 1102794673975152784} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.controller.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.controller.meta new file mode 100644 index 00000000..782ad153 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.controller.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a4b784adeafc54c718a457f939eec638 +labels: +- ObiRope +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.anim b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.anim new file mode 100644 index 00000000..7022f723 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.anim @@ -0,0 +1,459 @@ +%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: SpringBase + serializedVersion: 7 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 0, y: 0, z: 0} + 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: 2 + value: {x: 0, y: 0, z: 90} + 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: 3 + value: {x: 0, y: 0, z: 0} + 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_PositionCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 0, y: 2.405, z: 0} + 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: 1 + value: {x: -2, y: 2.405, z: 0} + 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: 2 + value: {x: 1.4489626, y: 5.32062, z: 0} + inSlope: {x: 1.1020746, y: 0, z: 0} + outSlope: {x: 1.1020746, 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: 3 + value: {x: 2, y: 2.405, z: 0} + 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, y: 2.405, z: 0} + 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 + - serializedVersion: 2 + path: 0 + attribute: 4 + script: {fileID: 0} + typeID: 4 + customType: 4 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 4 + 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: + - 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: 1 + value: -2 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 2 + value: 1.4489626 + inSlope: 1.1020746 + outSlope: 1.1020746 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3 + value: 2 + 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 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalPosition.x + path: + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 2.405 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 2.405 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 2 + value: 5.32062 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3 + value: 2.405 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 4 + value: 2.405 + 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} + - 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: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 2 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3 + 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 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalPosition.z + path: + classID: 4 + script: {fileID: 0} + - 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: 2 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3 + 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: localEulerAnglesRaw.x + path: + classID: 4 + script: {fileID: 0} + - 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: 2 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3 + 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: localEulerAnglesRaw.y + path: + classID: 4 + script: {fileID: 0} + - 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: 2 + value: 90 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 3 + 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: localEulerAnglesRaw.z + path: + classID: 4 + script: {fileID: 0} + m_EulerEditorCurves: + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.x + path: + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.y + path: + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.z + path: + classID: 4 + script: {fileID: 0} + m_HasGenericRootTransform: 1 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.anim.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.anim.meta new file mode 100644 index 00000000..2b72a5ea --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 64e85f20a274344c0aa6d69f24adb2da +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.controller b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.controller new file mode 100644 index 00000000..c406a0ce --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.controller @@ -0,0 +1,72 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: SpringBase + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 1107706386461285292} + 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} +--- !u!1102 &1102167745598837238 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: SpringBase + 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: 64e85f20a274344c0aa6d69f24adb2da, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1107 &1107706386461285292 +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: 1102167745598837238} + m_Position: {x: 264, 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: 1102167745598837238} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.controller.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.controller.meta new file mode 100644 index 00000000..36e5dca9 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.controller.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f1d1c5155bab2402a9c25e0867b791ef +labels: +- ObiRope +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints.meta new file mode 100644 index 00000000..e5470b0e --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 37c631910c18f4ddea83b72d2e0a026a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Chain.asset b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Chain.asset new file mode 100644 index 00000000..722c38cf --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Chain.asset @@ -0,0 +1,2220 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-4517029930201779066 +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: box + m_EditorClassIdentifier: + particleIndices: 17000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-257853511496805216 +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: mid point + m_EditorClassIdentifier: + particleIndices: 0c000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-53998285165153434 +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: ball + 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: Chain + m_EditorClassIdentifier: + m_Checksum: 2706284093 + m_Empty: 0 + m_Edited: 0 + m_ActiveParticleCount: 24 + m_InitialActiveParticleCount: 24 + _bounds: + m_Center: {x: -0.2282108, y: -0.20074356, z: -0.8564998} + m_Extent: {x: 1.2282108, y: 0.20074356, z: 0.8564998} + positions: + - {x: -1.4564216, y: -0.4014871, z: -1.6942042} + - {x: -1.2559584, y: -0.39924335, z: -1.6993358} + - {x: -1.0554394, y: -0.39508724, z: -1.704736} + - {x: -0.8241106, y: -0.38775176, z: -1.7103187} + - {x: -0.5924694, y: -0.3778487, z: -1.7129996} + - {x: -0.36051655, y: -0.36575028, z: -1.710554} + - {x: -0.12928915, y: -0.35137326, z: -1.69995} + - {x: 0.10057359, y: -0.33399644, z: -1.6753461} + - {x: 0.3251447, y: -0.31121653, z: -1.620016} + - {x: 0.46308318, y: -0.276663, z: -1.4629185} + - {x: 0.33540976, y: -0.25471836, z: -1.2770586} + - {x: 0.15128818, y: -0.2444846, z: -1.138357} + - {x: -0.049123213, y: -0.23823377, z: -1.0163414} + - {x: -0.2350844, y: -0.23193765, z: -0.90015733} + - {x: -0.40610352, y: -0.22026612, z: -0.7586036} + - {x: -0.5164732, y: -0.19748245, z: -0.57703835} + - {x: -0.45254478, y: -0.16008563, z: -0.3823164} + - {x: -0.27519998, y: -0.12711483, z: -0.26090837} + - {x: -0.072900996, y: -0.09951655, z: -0.18104196} + - {x: 0.1368935, y: -0.07519557, z: -0.12284149} + - {x: 0.35048765, y: -0.053085208, z: -0.078155346} + - {x: 0.56658244, y: -0.03275004, z: -0.043271925} + - {x: 0.784192, y: -0.014249971, z: -0.0166134} + - {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: -1.4564216, y: -0.4014871, z: -1.6942042, w: 1} + - {x: -1.2559584, y: -0.39924335, z: -1.6993358, w: 1} + - {x: -1.0554394, y: -0.39508724, z: -1.704736, w: 1} + - {x: -0.8241106, y: -0.38775176, z: -1.7103187, w: 1} + - {x: -0.5924694, y: -0.3778487, z: -1.7129996, w: 1} + - {x: -0.36051655, y: -0.36575028, z: -1.710554, w: 1} + - {x: -0.12928915, y: -0.35137326, z: -1.69995, w: 1} + - {x: 0.10057359, y: -0.33399644, z: -1.6753461, w: 1} + - {x: 0.3251447, y: -0.31121653, z: -1.620016, w: 1} + - {x: 0.46308318, y: -0.276663, z: -1.4629185, w: 1} + - {x: 0.33540976, y: -0.25471836, z: -1.2770586, w: 1} + - {x: 0.15128818, y: -0.2444846, z: -1.138357, w: 1} + - {x: -0.049123213, y: -0.23823377, z: -1.0163414, w: 1} + - {x: -0.2350844, y: -0.23193765, z: -0.90015733, w: 1} + - {x: -0.40610352, y: -0.22026612, z: -0.7586036, w: 1} + - {x: -0.5164732, y: -0.19748245, z: -0.57703835, w: 1} + - {x: -0.45254478, y: -0.16008563, z: -0.3823164, w: 1} + - {x: -0.27519998, y: -0.12711483, z: -0.26090837, w: 1} + - {x: -0.072900996, y: -0.09951655, z: -0.18104196, w: 1} + - {x: 0.1368935, y: -0.07519557, z: -0.12284149, w: 1} + - {x: 0.35048765, y: -0.053085208, z: -0.078155346, w: 1} + - {x: 0.56658244, y: -0.03275004, z: -0.043271925, w: 1} + - {x: 0.784192, y: -0.014249971, z: -0.0166134, 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} + 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} + angularVelocities: [] + invMasses: + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 10 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 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: 000000000100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + 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.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.10000002, y: 0.10000002, z: 0.10000002} + - {x: 0.10000002, y: 0.10000002, z: 0.10000002} + - {x: 0.100000024, y: 0.100000024, z: 0.100000024} + - {x: 0.100000024, y: 0.100000024, z: 0.100000024} + - {x: 0.100000024, y: 0.100000024, z: 0.100000024} + - {x: 0.100000024, y: 0.100000024, z: 0.100000024} + - {x: 0.100000024, y: 0.100000024, z: 0.100000024} + - {x: 0.100000024, y: 0.100000024, z: 0.100000024} + - {x: 0.100000024, y: 0.100000024, z: 0.100000024} + - {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.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, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {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, 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.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: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {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: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f000000100000001000000011000000110000001200000012000000130000001300000014000000140000001500000015000000160000001600000017000000 + triangles: + distanceConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d000000 + m_ConstraintCount: 62 + m_ActiveConstraintCount: 12 + m_InitialActiveConstraintCount: 12 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.20054139 + - 0.23151232 + - 0.23228103 + - 0.23182793 + - 0.21189757 + - 0.23074576 + - 0.2193626 + - 0.21369718 + - 0.21743543 + - 0.21907198 + - 0.21983477 + - 0.21691507 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c000000 + m_ConstraintCount: 61 + m_ActiveConstraintCount: 11 + m_InitialActiveConstraintCount: 11 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f0000001000000011000000120000001300000014000000150000001600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.20063484 + - 0.23186833 + - 0.23191649 + - 0.23240596 + - 0.22655237 + - 0.23471601 + - 0.22230886 + - 0.20833145 + - 0.21923774 + - 0.21933578 + - 0.22001559 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + m_AlignBytes: 16 + bendConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + m_ConstraintCount: 41 + m_ActiveConstraintCount: 8 + m_InitialActiveConstraintCount: 8 + particleIndices: + serializedContents: 000000000200000001000000030000000500000004000000060000000800000007000000090000000b0000000a0000000c0000000e0000000d0000000f0000001100000010000000120000001400000013000000150000001700000016000000180000001a000000190000001b0000001d0000001c0000001e000000200000001f0000002100000023000000220000002400000026000000250000002700000029000000280000002a0000002c0000002b0000002d0000002f0000002e000000300000003200000031000000330000003500000034000000360000003800000037000000390000003b0000003a0000003c0000003e0000003d0000003f0000004100000040000000420000004400000043000000450000004700000046000000480000004a000000490000004b0000004d0000004c0000004e000000500000004f0000005100000053000000520000005400000056000000550000005700000059000000580000005a0000005c0000005b0000005d0000005f0000005e000000600000006200000061000000630000006500000064000000660000006800000067000000690000006b0000006a0000006c0000006e0000006d0000006f0000007100000070000000720000007400000073000000750000007700000076000000780000007a00000079000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.00064396654 + - 0.0018618644 + - 0.010547898 + - 0.024827044 + - 0.009976552 + - 0.045040447 + - 0.0047370973 + - 0.0036850064 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + m_ConstraintCount: 41 + m_ActiveConstraintCount: 7 + m_InitialActiveConstraintCount: 7 + particleIndices: + serializedContents: 0100000003000000020000000400000006000000050000000700000009000000080000000a0000000c0000000b0000000d0000000f0000000e000000100000001200000011000000130000001500000014000000160000001800000017000000190000001b0000001a0000001c0000001e0000001d0000001f0000002100000020000000220000002400000023000000250000002700000026000000280000002a000000290000002b0000002d0000002c0000002e000000300000002f0000003100000033000000320000003400000036000000350000003700000039000000380000003a0000003c0000003b0000003d0000003f0000003e000000400000004200000041000000430000004500000044000000460000004800000047000000490000004b0000004a0000004c0000004e0000004d0000004f0000005100000050000000520000005400000053000000550000005700000056000000580000005a000000590000005b0000005d0000005c0000005e000000600000005f0000006100000063000000620000006400000066000000650000006700000069000000680000006a0000006c0000006b0000006d0000006f0000006e000000700000007200000071000000730000007500000074000000760000007800000077000000790000007b0000007a000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.010324595 + - 0.002833821 + - 0.04472188 + - 0.007885566 + - 0.024501137 + - 0.016252456 + - 0.00342375 + - 0.40533498 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000250000002600000027000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000250000002600000027000000 + m_ConstraintCount: 40 + m_ActiveConstraintCount: 7 + m_InitialActiveConstraintCount: 7 + particleIndices: + serializedContents: 020000000400000003000000050000000700000006000000080000000a000000090000000b0000000d0000000c0000000e000000100000000f0000001100000013000000120000001400000016000000150000001700000019000000180000001a0000001c0000001b0000001d0000001f0000001e000000200000002200000021000000230000002500000024000000260000002800000027000000290000002b0000002a0000002c0000002e0000002d0000002f0000003100000030000000320000003400000033000000350000003700000036000000380000003a000000390000003b0000003d0000003c0000003e000000400000003f0000004100000043000000420000004400000046000000450000004700000049000000480000004a0000004c0000004b0000004d0000004f0000004e000000500000005200000051000000530000005500000054000000560000005800000057000000590000005b0000005a0000005c0000005e0000005d0000005f0000006100000060000000620000006400000063000000650000006700000066000000680000006a000000690000006b0000006d0000006c0000006e000000700000006f000000710000007300000072000000740000007600000075000000770000007900000078000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.0012957505 + - 0.004794234 + - 0.089154 + - 0.0051941937 + - 0.058467906 + - 0.007719646 + - 0.0028540627 + - 0.33333334 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + skinConstraintsData: + batches: [] + tetherConstraintsData: + batches: [] + stretchShearConstraintsData: + batches: [] + bendTwistConstraintsData: + batches: [] + shapeMatchingConstraintsData: + batches: [] + aerodynamicConstraintsData: + 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: + batches: [] + groups: + - {fileID: -53998285165153434} + - {fileID: 7546284794258584817} + - {fileID: -257853511496805216} + - {fileID: -4517029930201779066} + path: + m_Names: + - ball + - ball 2 + - mid point + - box + m_Points: + data: + - tangentMode: 0 + inTangent: {x: -0.24993628, y: -0, z: 0.005638841} + position: {x: -1.4564216, y: -0.4014871, z: -1.6942042} + outTangent: {x: 0.069640994, y: 0, z: -0.0015711784} + - tangentMode: 0 + inTangent: {x: -0.1652112, y: -0.00408864, z: 0.004468441} + position: {x: -1.0554394, y: -0.39508724, z: -1.704736} + outTangent: {x: 0.7965044, y: 0.019711858, z: -0.021542927} + - tangentMode: 0 + inTangent: {x: 1.3105737, y: -0.03177786, z: -0.7446065} + position: {x: -0.049123213, y: -0.23823377, z: -1.0163414} + outTangent: {x: -1.4556304, y: 0.03529509, z: 0.8270209} + - tangentMode: 0 + inTangent: {x: -0.14064473, 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} + - {x: 0, y: 1.0000001, 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.0000001, g: 1.0000001, b: 1.0000001, a: 1.0000001} + - {r: 1, g: 1, b: 1, a: 1} + m_Thickness: + data: + - 1 + - 1 + - 1.0000002 + - 1 + m_Masses: + data: + - 0.1 + - 0.1 + - 0.10000001 + - 0.1 + m_RotationalMasses: + data: + - 1 + - 1 + - 1.0000001 + - 1 + m_Filters: + data: 000000000100ffff0100ffff0100ffff + m_Closed: 0 + m_ArcLengthTable: + - 0 + - 0.010597409 + - 0.022445109 + - 0.03548003 + - 0.049639076 + - 0.06485915 + - 0.08107715 + - 0.09822995 + - 0.11625445 + - 0.13508752 + - 0.15466605 + - 0.17492694 + - 0.19580704 + - 0.21724324 + - 0.23917243 + - 0.26153147 + - 0.2842573 + - 0.30728674 + - 0.33055672 + - 0.3540041 + - 0.3775658 + - 0.4011787 + - 0.51959425 + - 0.64557546 + - 0.77681607 + - 0.9110185 + - 1.0458997 + - 1.1791987 + - 1.3086872 + - 1.432188 + - 1.5476058 + - 1.6529827 + - 1.7466094 + - 1.8272604 + - 1.8947363 + - 1.9511089 + - 2.0027907 + - 2.0606318 + - 2.1352768 + - 2.2340822 + - 2.3619528 + - 2.5225785 + - 2.7190704 + - 2.9344335 + - 3.1057208 + - 3.2391896 + - 3.3428776 + - 3.42762 + - 3.506474 + - 3.5906832 + - 3.6862862 + - 3.7948225 + - 3.9152896 + - 4.045405 + - 4.1822286 + - 4.322462 + - 4.4625993 + - 4.5990067 + - 4.7279696 + - 4.845718 + - 4.948445 + - 5.0323176 + - 5.0934873 + - 5.128111 + m_TotalSplineLenght: 5.128111 + 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.43 + m_InterParticleDistance: 0.22296134 + totalParticles: 124 + m_RestLength: 27.388588 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f000000100000001000000011000000110000001200000012000000130000001300000014000000140000001500000015000000160000001600000017000000 + restLengths: + - 0.20054139 + - 0.20063484 + - 0.23151232 + - 0.23186833 + - 0.23228103 + - 0.23191649 + - 0.23182793 + - 0.23240596 + - 0.21189757 + - 0.22655237 + - 0.23074576 + - 0.23471601 + - 0.2193626 + - 0.22230886 + - 0.21369718 + - 0.20833145 + - 0.21743543 + - 0.21923774 + - 0.21907198 + - 0.21933578 + - 0.21983477 + - 0.22001559 + - 0.21691507 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0.22296134 + - 0 + pooledParticles: 100 +--- !u!114 &7546284794258584817 +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: ball 2 + m_EditorClassIdentifier: + particleIndices: 02000000 + m_Blueprint: {fileID: 11400000} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Chain.asset.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Chain.asset.meta new file mode 100644 index 00000000..2e20b922 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Chain.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9b7a30b754796421d9e0b869d8eb345b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Crane.asset b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Crane.asset new file mode 100644 index 00000000..8e15a464 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Crane.asset @@ -0,0 +1,2809 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-4315519228067560828 +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: fixed + m_EditorClassIdentifier: + particleIndices: 0c000000 + 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: 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.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} + - {x: -0.29735997, y: -3.1172025, z: 0} + - {x: -0.294137, y: -2.9663126, z: 0} + - {x: -0.29642835, y: -2.815257, z: 0} + - {x: -0.30447915, y: -2.6642547, z: 0} + - {x: -0.31146774, y: -2.51792, z: 0} + - {x: -0.3127913, y: -2.3713863, z: 0} + - {x: -0.31057096, y: -2.224849, z: 0} + - {x: -0.30657423, y: -2.0783458, z: 0} + - {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.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.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} + - {x: 2.2384713, y: -0.37482882, z: 0} + - {x: 2.262533, y: -0.5387369, z: 0} + - {x: 2.2718787, y: -0.7041704, z: 0} + - {x: 2.2708015, y: -0.86981475, z: 0} + - {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.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} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {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.31512982, y: -3.4186378, z: 0, w: 1} + - {x: -0.3056823, y: -3.268208, z: 0, w: 1} + - {x: -0.29735997, y: -3.1172025, z: 0, w: 1} + - {x: -0.294137, y: -2.9663126, z: 0, w: 1} + - {x: -0.29642835, y: -2.815257, z: 0, w: 1} + - {x: -0.30447915, y: -2.6642547, z: 0, w: 1} + - {x: -0.31146774, y: -2.51792, z: 0, w: 1} + - {x: -0.3127913, y: -2.3713863, z: 0, w: 1} + - {x: -0.31057096, y: -2.224849, z: 0, w: 1} + - {x: -0.30657423, y: -2.0783458, z: 0, w: 1} + - {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.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.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} + - {x: 2.2384713, y: -0.37482882, z: 0, w: 1} + - {x: 2.262533, y: -0.5387369, z: 0, w: 1} + - {x: 2.2718787, y: -0.7041704, z: 0, w: 1} + - {x: 2.2708015, y: -0.86981475, z: 0, w: 1} + - {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.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} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + 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} + - {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.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 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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: 0100ffff0100ffff010000000100000001000000010000000100000001000000010000000100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + principalRadii: + - {x: 0.05, y: 0.05, z: 0.05} + - {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.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.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.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} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {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: 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: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {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: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f00000020000000200000002100000021000000220000002200000023000000230000002400000024000000250000002500000026000000260000002700000027000000280000002800000029000000290000002a0000002a0000002b0000002b0000002c0000002c0000002d0000002d0000002e0000002e0000002f0000002f0000003000000030000000310000003100000032000000 + triangles: + distanceConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a000000 + m_ConstraintCount: 75 + m_ActiveConstraintCount: 25 + m_InitialActiveConstraintCount: 25 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.1507261 + - 0.1509243 + - 0.15121686 + - 0.1465397 + - 0.14655772 + - 0.146547 + - 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.14609504 + - 0.14654693 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a000000 + m_ConstraintCount: 75 + m_ActiveConstraintCount: 25 + m_InitialActiveConstraintCount: 25 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f00000030000000310000003200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.15123467 + - 0.15107295 + - 0.14650144 + - 0.14655413 + - 0.14655447 + - 0.146539 + - 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.1464947 + - 0.1460539 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + - {x: 0, y: 0} + - {x: 0, y: 0} + m_AlignBytes: 16 + bendConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f0000003000000031000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f0000003000000031000000 + m_ConstraintCount: 50 + m_ActiveConstraintCount: 17 + m_InitialActiveConstraintCount: 17 + particleIndices: + serializedContents: 000000000200000001000000030000000500000004000000060000000800000007000000090000000b0000000a0000000c0000000e0000000d0000000f0000001100000010000000120000001400000013000000150000001700000016000000180000001a000000190000001b0000001d0000001c0000001e000000200000001f0000002100000023000000220000002400000026000000250000002700000029000000280000002a0000002c0000002b0000002d0000002f0000002e000000300000003200000031000000330000003500000034000000360000003800000037000000390000003b0000003a0000003c0000003e0000003d0000003f0000004100000040000000420000004400000043000000450000004700000046000000480000004a000000490000004b0000004d0000004c0000004e000000500000004f0000005100000053000000520000005400000056000000550000005700000059000000580000005a0000005c0000005b0000005d0000005f0000005e000000600000006200000061000000630000006500000064000000660000006800000067000000690000006b0000006a0000006c0000006e0000006d0000006f0000007100000070000000720000007400000073000000750000007700000076000000780000007a000000790000007b0000007d0000007c0000007e000000800000007f0000008100000083000000820000008400000086000000850000008700000089000000880000008a0000008c0000008b0000008d0000008f0000008e000000900000009200000091000000930000009500000094000000 + 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 + - 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} + - {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} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f0000003000000031000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f0000003000000031000000 + m_ConstraintCount: 50 + m_ActiveConstraintCount: 16 + m_InitialActiveConstraintCount: 16 + particleIndices: + serializedContents: 0100000003000000020000000400000006000000050000000700000009000000080000000a0000000c0000000b0000000d0000000f0000000e000000100000001200000011000000130000001500000014000000160000001800000017000000190000001b0000001a0000001c0000001e0000001d0000001f0000002100000020000000220000002400000023000000250000002700000026000000280000002a000000290000002b0000002d0000002c0000002e000000300000002f0000003100000033000000320000003400000036000000350000003700000039000000380000003a0000003c0000003b0000003d0000003f0000003e000000400000004200000041000000430000004500000044000000460000004800000047000000490000004b0000004a0000004c0000004e0000004d0000004f0000005100000050000000520000005400000053000000550000005700000056000000580000005a000000590000005b0000005d0000005c0000005e000000600000005f0000006100000063000000620000006400000066000000650000006700000069000000680000006a0000006c0000006b0000006d0000006f0000006e000000700000007200000071000000730000007500000074000000760000007800000077000000790000007b0000007a0000007c0000007e0000007d0000007f0000008100000080000000820000008400000083000000850000008700000086000000880000008a000000890000008b0000008d0000008c0000008e000000900000008f000000910000009300000092000000940000009600000095000000 + 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 + - 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} + - {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} + - {x: 0, y: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f00000030000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f00000030000000 + m_ConstraintCount: 49 + m_ActiveConstraintCount: 16 + m_InitialActiveConstraintCount: 16 + particleIndices: + serializedContents: 020000000400000003000000050000000700000006000000080000000a000000090000000b0000000d0000000c0000000e000000100000000f0000001100000013000000120000001400000016000000150000001700000019000000180000001a0000001c0000001b0000001d0000001f0000001e000000200000002200000021000000230000002500000024000000260000002800000027000000290000002b0000002a0000002c0000002e0000002d0000002f0000003100000030000000320000003400000033000000350000003700000036000000380000003a000000390000003b0000003d0000003c0000003e000000400000003f0000004100000043000000420000004400000046000000450000004700000049000000480000004a0000004c0000004b0000004d0000004f0000004e000000500000005200000051000000530000005500000054000000560000005800000057000000590000005b0000005a0000005c0000005e0000005d0000005f0000006100000060000000620000006400000063000000650000006700000066000000680000006a000000690000006b0000006d0000006c0000006e000000700000006f0000007100000073000000720000007400000076000000750000007700000079000000780000007a0000007c0000007b0000007d0000007f0000007e000000800000008200000081000000830000008500000084000000860000008800000087000000890000008b0000008a0000008c0000008e0000008d0000008f0000009100000090000000920000009400000093000000 + 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 + skinConstraintsData: + batches: [] + tetherConstraintsData: + batches: [] + stretchShearConstraintsData: + batches: [] + bendTwistConstraintsData: + batches: [] + shapeMatchingConstraintsData: + batches: [] + aerodynamicConstraintsData: + 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: + batches: [] + groups: + - {fileID: 1429558885246807610} + - {fileID: 3784795246232506483} + - {fileID: -4315519228067560828} + - {fileID: 8966044903772103319} + - {fileID: 1448059488115486757} + - {fileID: 221160992778322150} + - {fileID: 7137255722519385285} + - {fileID: 7435677298537737283} + path: + m_Names: + - fixed + - control point + - fixed + - fixed + - fixed + - control point + - control point + - endpoint + m_Points: + data: + - tangentMode: 0 + inTangent: {x: 0.013374074, y: -0.24964216, z: -0} + position: {x: -0.31512982, y: -3.4186378, z: 0} + outTangent: {x: -0.0029436946, y: 0.054947376, z: 0} + - tangentMode: 0 + inTangent: {x: 0.029481154, y: -0.40428692, z: -0} + position: {x: -0.30447915, y: -2.6642547, z: 0} + outTangent: {x: -0.023183525, y: 0.31792498, z: 0} + - tangentMode: 0 + inTangent: {x: 0.0043648183, y: -0.34541774, z: 0} + position: {x: -0.2993567, y: -1.6387947, z: 0} + outTangent: {x: -0.004487418, y: 0.35511988, z: 0} + - tangentMode: 0 + inTangent: {x: -0.042096525, y: -0.31926423, 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.076556884, y: -0.16405949, z: -0} + position: {x: -0.24022967, y: -0.013745427, 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} + outTangent: {x: 0.35668874, y: -0.26089552, z: 0} + - tangentMode: 0 + inTangent: {x: 0.04056835, y: 0.42199183, z: 0} + position: {x: 2.2330368, y: -1.3651848, z: 0} + 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.9501454, z: 0} + outTangent: {x: 0.0047840523, y: -0.24995418, z: 0} + 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} + - {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} + - {r: 1, g: 1, b: 1, a: 1} + m_Thickness: + data: + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + m_Masses: + data: + - 0.1 + - 0.1 + - 0.1 + - 0.1 + - 0.1 + - 0.1 + - 0.1 + - 0.1 + m_RotationalMasses: + data: + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + m_Filters: + data: 0100ffff010000000100ffff0100ffff0100ffff0100ffff0100ffff01000000 + m_Closed: 0 + m_ArcLengthTable: + - 0 + - 0.009472036 + - 0.022132482 + - 0.03790929 + - 0.056718282 + - 0.078470945 + - 0.10307723 + - 0.13044672 + - 0.16048929 + - 0.19311549 + - 0.22823672 + - 0.26576552 + - 0.30561554 + - 0.34770188 + - 0.39194104 + - 0.43825117 + - 0.4865521 + - 0.53676546 + - 0.588815 + - 0.6426263 + - 0.6981274 + - 0.75524855 + - 0.80105555 + - 0.847384 + - 0.89420784 + - 0.94149816 + - 0.9892235 + - 1.03735 + - 1.0858425 + - 1.1346636 + - 1.183775 + - 1.2331372 + - 1.2827103 + - 1.3324533 + - 1.3823252 + - 1.4322847 + - 1.4822909 + - 1.5323029 + - 1.5822803 + - 1.6321836 + - 1.6819742 + - 1.7316145 + - 1.7810686 + - 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: [] + OnControlPointAdded: + m_PersistentCalls: + m_Calls: [] + OnControlPointRemoved: + m_PersistentCalls: + m_Calls: [] + OnControlPointRenamed: + m_PersistentCalls: + m_Calls: [] + thickness: 0.05 + resolution: 0.3 + m_InterParticleDistance: 0.15608342 + totalParticles: 151 + m_RestLength: 23.405613 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f00000020000000200000002100000021000000220000002200000023000000230000002400000024000000250000002500000026000000260000002700000027000000280000002800000029000000290000002a0000002a0000002b0000002b0000002c0000002c0000002d0000002d0000002e0000002e0000002f0000002f0000003000000030000000310000003100000032000000 + restLengths: + - 0.1507261 + - 0.15123467 + - 0.1509243 + - 0.15107295 + - 0.15121686 + - 0.14650144 + - 0.1465397 + - 0.14655413 + - 0.14655772 + - 0.14655447 + - 0.146547 + - 0.146539 + - 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 + - 0.16566478 + - 0.1656973 + - 0.16564785 + - 0.1657586 + - 0.16586185 + - 0.1652724 + - 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 +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: control point + m_EditorClassIdentifier: + particleIndices: 25000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &1429558885246807610 +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: fixed + m_EditorClassIdentifier: + particleIndices: 00000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &1448059488115486757 +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: fixed + m_EditorClassIdentifier: + particleIndices: 17000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &3784795246232506483 +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: control point + m_EditorClassIdentifier: + particleIndices: 05000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &7137255722519385285 +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: control point + m_EditorClassIdentifier: + particleIndices: 2e000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &7435677298537737283 +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: endpoint + m_EditorClassIdentifier: + particleIndices: 32000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &8966044903772103319 +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: fixed + m_EditorClassIdentifier: + particleIndices: 13000000 + m_Blueprint: {fileID: 11400000} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Crane.asset.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Crane.asset.meta new file mode 100644 index 00000000..97570c90 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Crane.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d3d21d979f26f472ca2945f4e727239c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CuttableRope.asset b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CuttableRope.asset new file mode 100644 index 00000000..1c8ded43 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CuttableRope.asset @@ -0,0 +1,2519 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-8864857226987616246 +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: 2e000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-2639811391673711616 +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: 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.1317979, z: 0} + m_Extent: {x: 1, y: 1.1317979, z: 0} + positions: + - {x: -1, y: 0, 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} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {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, y: 0, 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} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + 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: + - 10 + - 10 + - 10 + - 9.999999 + - 10.000001 + - 10 + - 10 + - 10 + - 9.999999 + - 10.000001 + - 10.000001 + - 9.999998 + - 10.000001 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 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: 0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + principalRadii: + - {x: 0.029999997, y: 0.029999997, z: 0.029999997} + - {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.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} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {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: 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: 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: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {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: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f00000020000000200000002100000021000000220000002200000023000000230000002400000024000000250000002500000026000000260000002700000027000000280000002800000029000000290000002a0000002a0000002b0000002b0000002c0000002c0000002d0000002d0000002e000000 + triangles: + distanceConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000 + m_ConstraintCount: 73 + m_ActiveConstraintCount: 23 + m_InitialActiveConstraintCount: 23 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 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 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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: 23 + m_InitialActiveConstraintCount: 23 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 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 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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 + bendConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f00000030000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f00000030000000 + m_ConstraintCount: 49 + m_ActiveConstraintCount: 15 + m_InitialActiveConstraintCount: 15 + particleIndices: + serializedContents: 000000000200000001000000030000000500000004000000060000000800000007000000090000000b0000000a0000000c0000000e0000000d0000000f0000001100000010000000120000001400000013000000150000001700000016000000180000001a000000190000001b0000001d0000001c0000001e000000200000001f0000002100000023000000220000002400000026000000250000002700000029000000280000002a0000002c0000002b0000002d0000002f0000002e000000300000003200000031000000330000003500000034000000360000003800000037000000390000003b0000003a0000003c0000003e0000003d0000003f0000004100000040000000420000004400000043000000450000004700000046000000480000004a000000490000004b0000004d0000004c0000004e000000500000004f0000005100000053000000520000005400000056000000550000005700000059000000580000005a0000005c0000005b0000005d0000005f0000005e000000600000006200000061000000630000006500000064000000660000006800000067000000690000006b0000006a0000006c0000006e0000006d0000006f0000007100000070000000720000007400000073000000750000007700000076000000780000007a000000790000007b0000007d0000007c0000007e000000800000007f0000008100000083000000820000008400000086000000850000008700000089000000880000008a0000008c0000008b0000008d0000008f0000008e000000900000009200000091000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 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 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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: 15 + m_InitialActiveConstraintCount: 15 + particleIndices: + serializedContents: 0100000003000000020000000400000006000000050000000700000009000000080000000a0000000c0000000b0000000d0000000f0000000e000000100000001200000011000000130000001500000014000000160000001800000017000000190000001b0000001a0000001c0000001e0000001d0000001f0000002100000020000000220000002400000023000000250000002700000026000000280000002a000000290000002b0000002d0000002c0000002e000000300000002f0000003100000033000000320000003400000036000000350000003700000039000000380000003a0000003c0000003b0000003d0000003f0000003e000000400000004200000041000000430000004500000044000000460000004800000047000000490000004b0000004a0000004c0000004e0000004d0000004f0000005100000050000000520000005400000053000000550000005700000056000000580000005a000000590000005b0000005d0000005c0000005e000000600000005f0000006100000063000000620000006400000066000000650000006700000069000000680000006a0000006c0000006b0000006d0000006f0000006e000000700000007200000071000000730000007500000074000000760000007800000077000000790000007b0000007a0000007c0000007e0000007d0000007f0000008100000080000000820000008400000083000000850000008700000086000000880000008a000000890000008b0000008d0000008c0000008e000000900000008f000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 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 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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: 15 + m_InitialActiveConstraintCount: 15 + particleIndices: + serializedContents: 020000000400000003000000050000000700000006000000080000000a000000090000000b0000000d0000000c0000000e000000100000000f0000001100000013000000120000001400000016000000150000001700000019000000180000001a0000001c0000001b0000001d0000001f0000001e000000200000002200000021000000230000002500000024000000260000002800000027000000290000002b0000002a0000002c0000002e0000002d0000002f0000003100000030000000320000003400000033000000350000003700000036000000380000003a000000390000003b0000003d0000003c0000003e000000400000003f0000004100000043000000420000004400000046000000450000004700000049000000480000004a0000004c0000004b0000004d0000004f0000004e000000500000005200000051000000530000005500000054000000560000005800000057000000590000005b0000005a0000005c0000005e0000005d0000005f0000006100000060000000620000006400000063000000650000006700000066000000680000006a000000690000006b0000006d0000006c0000006e000000700000006f0000007100000073000000720000007400000076000000750000007700000079000000780000007a0000007c0000007b0000007d0000007f0000007e000000800000008200000081000000830000008500000084000000860000008800000087000000890000008b0000008a0000008c0000008e0000008d0000008f0000009100000090000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 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 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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 + skinConstraintsData: + batches: [] + tetherConstraintsData: + batches: [] + stretchShearConstraintsData: + batches: [] + bendTwistConstraintsData: + batches: [] + shapeMatchingConstraintsData: + batches: [] + aerodynamicConstraintsData: + 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: + batches: [] + groups: + - {fileID: -2639811391673711616} + - {fileID: 5589158130596133390} + - {fileID: -8864857226987616246} + path: + m_Names: + - start + - middle + - end + m_Points: + data: + - tangentMode: 0 + inTangent: {x: -0.053591967, y: 0.2441883, z: -0} + position: {x: -1, y: 0, z: 0} + 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.2635958, z: 0} + outTangent: {x: 0.9498895, y: -0.0065454063, z: 0} + - tangentMode: 0 + inTangent: {x: -0.1654113, y: -0.6018264, z: 0} + position: {x: 1, y: 0, z: 0} + outTangent: {x: 0.06625523, y: 0.24106061, 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: + - 0.99999994 + - 0.9654712 + - 1 + m_Masses: + data: + - 0.1 + - 0.10000001 + - 0.1 + m_RotationalMasses: + data: + - 1 + - 1 + - 1 + m_Filters: + data: 0100ffff0100ffff0100ffff + m_Closed: 0 + m_ArcLengthTable: + - 0 + - 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: [] + OnControlPointAdded: + m_PersistentCalls: + m_Calls: [] + OnControlPointRemoved: + m_PersistentCalls: + m_Calls: [] + OnControlPointRenamed: + m_PersistentCalls: + m_Calls: [] + thickness: 0.03 + resolution: 0.25 + m_InterParticleDistance: 0.11725744 + totalParticles: 147 + m_RestLength: 17.117582 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f00000020000000200000002100000021000000220000002200000023000000230000002400000024000000250000002500000026000000260000002700000027000000280000002800000029000000290000002a0000002a0000002b0000002b0000002c0000002c0000002d0000002d0000002e000000 + restLengths: + - 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 +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: middle + m_EditorClassIdentifier: + particleIndices: 17000000 + m_Blueprint: {fileID: 11400000} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CuttableRope.asset.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CuttableRope.asset.meta new file mode 100644 index 00000000..82d57934 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CuttableRope.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f92460ac39eb444ad8f2bfb5714bb425 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Firehose.asset b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Firehose.asset new file mode 100644 index 00000000..76d2f96b --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Firehose.asset @@ -0,0 +1,780 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-2867197770825267649 +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 &-2309273508427477570 +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: 27000000 + 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: Firehose + m_EditorClassIdentifier: + m_Checksum: 0 + m_Empty: 0 + m_Edited: 0 + m_ActiveParticleCount: 40 + m_InitialActiveParticleCount: 40 + _bounds: + m_Center: {x: -1.7310143, y: 0, z: 0} + m_Extent: {x: 2.7310143, y: 0, z: 0} + positions: + - {x: -4.462028, y: 0, z: 0} + - {x: -4.348594, y: 0, z: 0} + - {x: -4.2085147, y: 0, z: 0} + - {x: -4.071203, y: 0, z: 0} + - {x: -3.9306402, y: 0, z: 0} + - {x: -3.785646, y: 0, z: 0} + - {x: -3.6486564, y: 0, z: 0} + - {x: -3.504979, y: 0, z: 0} + - {x: -3.36648, y: 0, z: 0} + - {x: -3.2230043, y: 0, z: 0} + - {x: -3.084384, y: 0, z: 0} + - {x: -2.9416027, y: 0, z: 0} + - {x: -2.8021276, y: 0, z: 0} + - {x: -2.6607575, y: 0, z: 0} + - {x: -2.5197048, y: 0, z: 0} + - {x: -2.3792155, y: 0, z: 0} + - {x: -2.2374017, y: 0, z: 0} + - {x: -2.0971684, y: 0, z: 0} + - {x: -1.9560953, y: 0, z: 0} + - {x: -1.8150618, y: 0, z: 0} + - {x: -1.6742334, y: 0, z: 0} + - {x: -1.5334656, y: 0, z: 0} + - {x: -1.3921267, y: 0, z: 0} + - {x: -1.251627, y: 0, z: 0} + - {x: -1.1103319, y: 0, z: 0} + - {x: -0.96929765, y: 0, z: 0} + - {x: -0.82927155, y: 0, z: 0} + - {x: -0.6870387, y: 0, z: 0} + - {x: -0.5477292, y: 0, z: 0} + - {x: -0.40506354, y: 0, z: 0} + - {x: -0.26526135, y: 0, z: 0} + - {x: -0.12323682, y: 0, z: 0} + - {x: 0.016865503, y: 0, z: 0} + - {x: 0.15891849, y: 0, z: 0} + - {x: 0.29801917, y: 0, z: 0} + - {x: 0.44157395, y: 0, z: 0} + - {x: 0.5802135, y: 0, z: 0} + - {x: 0.72034454, y: 0, z: 0} + - {x: 0.8617192, y: 0, z: 0} + - {x: 1, y: 0, z: 0} + restPositions: + - {x: -4.462028, y: 0, z: 0, w: 1} + - {x: -4.348594, y: 0, z: 0, w: 1} + - {x: -4.2085147, y: 0, z: 0, w: 1} + - {x: -4.071203, y: 0, z: 0, w: 1} + - {x: -3.9306402, y: 0, z: 0, w: 1} + - {x: -3.785646, y: 0, z: 0, w: 1} + - {x: -3.6486564, y: 0, z: 0, w: 1} + - {x: -3.504979, y: 0, z: 0, w: 1} + - {x: -3.36648, y: 0, z: 0, w: 1} + - {x: -3.2230043, y: 0, z: 0, w: 1} + - {x: -3.084384, y: 0, z: 0, w: 1} + - {x: -2.9416027, y: 0, z: 0, w: 1} + - {x: -2.8021276, y: 0, z: 0, w: 1} + - {x: -2.6607575, y: 0, z: 0, w: 1} + - {x: -2.5197048, y: 0, z: 0, w: 1} + - {x: -2.3792155, y: 0, z: 0, w: 1} + - {x: -2.2374017, y: 0, z: 0, w: 1} + - {x: -2.0971684, y: 0, z: 0, w: 1} + - {x: -1.9560953, y: 0, z: 0, w: 1} + - {x: -1.8150618, y: 0, z: 0, w: 1} + - {x: -1.6742334, y: 0, z: 0, w: 1} + - {x: -1.5334656, y: 0, z: 0, w: 1} + - {x: -1.3921267, y: 0, z: 0, w: 1} + - {x: -1.251627, y: 0, z: 0, w: 1} + - {x: -1.1103319, y: 0, z: 0, w: 1} + - {x: -0.96929765, y: 0, z: 0, w: 1} + - {x: -0.82927155, y: 0, z: 0, w: 1} + - {x: -0.6870387, y: 0, z: 0, w: 1} + - {x: -0.5477292, y: 0, z: 0, w: 1} + - {x: -0.40506354, y: 0, z: 0, w: 1} + - {x: -0.26526135, y: 0, z: 0, w: 1} + - {x: -0.12323682, y: 0, z: 0, w: 1} + - {x: 0.016865503, y: 0, z: 0, w: 1} + - {x: 0.15891849, y: 0, z: 0, w: 1} + - {x: 0.29801917, y: 0, z: 0, w: 1} + - {x: 0.44157395, y: 0, z: 0, w: 1} + - {x: 0.5802135, y: 0, z: 0, w: 1} + - {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} + 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} + angularVelocities: [] + invMasses: + - 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 + invRotationalMasses: [] + filters: 0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff0200ffff + principalRadii: + - {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.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.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.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.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.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.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.099999994, y: 0.099999994, z: 0.099999994} + - {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} + colors: + - {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: 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: 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: 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: 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: 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: 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: 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} + points: + edges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f000000200000002000000021000000210000002200000022000000230000002300000024000000240000002500000025000000260000002600000027000000 + triangles: + distanceConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013000000 + m_ConstraintCount: 20 + m_ActiveConstraintCount: 20 + m_InitialActiveConstraintCount: 20 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000250000002600000027000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.11343384 + - 0.13731146 + - 0.14499426 + - 0.14367747 + - 0.14347577 + - 0.14278126 + - 0.14137006 + - 0.14048934 + - 0.14023328 + - 0.14103353 + - 0.14076781 + - 0.14049971 + - 0.14103425 + - 0.14223284 + - 0.14266565 + - 0.14202453 + - 0.14205298 + - 0.14355478 + - 0.14013106 + - 0.13828081 + 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: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000 + m_ConstraintCount: 19 + m_ActiveConstraintCount: 19 + m_InitialActiveConstraintCount: 19 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000210000002200000023000000240000002500000026000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.1400795 + - 0.14056301 + - 0.1369896 + - 0.13849878 + - 0.13862038 + - 0.1394751 + - 0.14105272 + - 0.14181376 + - 0.14107311 + - 0.14082837 + - 0.14133894 + - 0.14129508 + - 0.14002609 + - 0.13930953 + - 0.13980219 + - 0.14010233 + - 0.13910069 + - 0.13863954 + - 0.14137465 + 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} + m_AlignBytes: 16 + bendConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c000000 + m_ConstraintCount: 13 + m_ActiveConstraintCount: 13 + m_InitialActiveConstraintCount: 13 + particleIndices: + serializedContents: 000000000200000001000000030000000500000004000000060000000800000007000000090000000b0000000a0000000c0000000e0000000d0000000f0000001100000010000000120000001400000013000000150000001700000016000000180000001a000000190000001b0000001d0000001c0000001e000000200000001f000000210000002300000022000000240000002600000025000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.008882046 + - 0.0014772415 + - 0.0017263889 + - 0.0013868809 + - 0.00010585785 + - 0.00052690506 + - 0.00006842613 + - 0.0002797842 + - 0.0003361106 + - 0.00111866 + - 0.00064073503 + - 0.0014846921 + - 0.0004145503 + 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: 13 + m_InitialActiveConstraintCount: 13 + particleIndices: + serializedContents: 0100000003000000020000000400000006000000050000000700000009000000080000000a0000000c0000000b0000000d0000000f0000000e000000100000001200000011000000130000001500000014000000160000001800000017000000190000001b0000001a0000001c0000001e0000001d0000001f0000002100000020000000220000002400000023000000250000002700000026000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.00092315674 + - 0.0026681423 + - 0.0016589165 + - 0.0011022091 + - 0.00018787384 + - 0.0002799034 + - 0.00002014637 + - 0.00026512146 + - 0.0007355809 + - 0.000954479 + - 0.0006502196 + - 0.0016384125 + - 0.0010312796 + 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: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b000000 + m_ConstraintCount: 12 + m_ActiveConstraintCount: 12 + m_InitialActiveConstraintCount: 12 + particleIndices: + serializedContents: 020000000400000003000000050000000700000006000000080000000a000000090000000b0000000d0000000c0000000e000000100000000f0000001100000013000000120000001400000016000000150000001700000019000000180000001a0000001c0000001b0000001d0000001f0000001e000000200000002200000021000000230000002500000024000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.0010838509 + - 0.0022292137 + - 0.0016183853 + - 0.00063180923 + - 0.0004415512 + - 0.000013232231 + - 0.00019037724 + - 0.00008690357 + - 0.00097441673 + - 0.0007407963 + - 0.0009841025 + - 0.00049716234 + 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} + 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} + m_AlignBytes: 16 + skinConstraintsData: + batches: [] + tetherConstraintsData: + batches: [] + stretchShearConstraintsData: + batches: [] + bendTwistConstraintsData: + batches: [] + shapeMatchingConstraintsData: + batches: [] + aerodynamicConstraintsData: + batches: [] + chainConstraintsData: + batches: [] + volumeConstraintsData: + batches: [] + groups: + - {fileID: -2867197770825267649} + - {fileID: 5505919189061892379} + - {fileID: -2309273508427477570} + path: + m_Names: + - start + - start_aux + - end + m_Points: + data: + - tangentMode: 0 + inTangent: {x: -0.25, y: -0, z: -0} + position: {x: -4.462028, y: 0, z: 0} + outTangent: {x: 0.02319622, y: 0, z: 0} + - tangentMode: 0 + inTangent: {x: -0.051820755, y: 0, z: 0} + position: {x: -4.348594, y: 0, z: 0} + outTangent: {x: 0.8503418, y: 0, z: 0} + - tangentMode: 0 + inTangent: {x: -0.038733304, 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: 0.99999994, z: 0} + - {x: 0, y: 1, z: 0} + m_Colors: + data: + - {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} + m_Thickness: + data: + - 1 + - 0.99999994 + - 1 + m_Masses: + data: + - 0.1 + - 0.1 + - 0.1 + m_RotationalMasses: + data: + - 1 + - 0.99999994 + - 1 + m_Filters: + data: 0200ffff0200ffff0200ffff + m_Closed: 0 + m_ArcLengthTable: + - 0 + - 0.0034170914 + - 0.007040089 + - 0.010867817 + - 0.014899097 + - 0.019132752 + - 0.023567606 + - 0.028202482 + - 0.033036202 + - 0.038067587 + - 0.043295465 + - 0.048718657 + - 0.054335985 + - 0.060146272 + - 0.06614834 + - 0.07234101 + - 0.07872311 + - 0.085293464 + - 0.09205089 + - 0.09899421 + - 0.106122255 + - 0.11343384 + - 0.2585964 + - 0.44766098 + - 0.6754252 + - 0.9366864 + - 1.2262423 + - 1.5388906 + - 1.8694286 + - 2.212654 + - 2.5633645 + - 2.9163575 + - 3.2664306 + - 3.6083813 + - 3.937007 + - 4.2471056 + - 4.5334744 + - 4.790911 + - 5.0142136 + - 5.198179 + - 5.3376045 + - 5.4272885 + - 5.462028 + m_TotalSplineLenght: 5.462028 + 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.7 + m_InterParticleDistance: 0.140052 + totalParticles: 40 + m_RestLength: 5.4620275 + deformableEdges: + restLengths: + - 0.11343384 + - 0.1400795 + - 0.13731146 + - 0.14056301 + - 0.14499426 + - 0.1369896 + - 0.14367747 + - 0.13849878 + - 0.14347577 + - 0.13862038 + - 0.14278126 + - 0.1394751 + - 0.14137006 + - 0.14105272 + - 0.14048934 + - 0.14181376 + - 0.14023328 + - 0.14107311 + - 0.14103353 + - 0.14082837 + - 0.14076781 + - 0.14133894 + - 0.14049971 + - 0.14129508 + - 0.14103425 + - 0.14002609 + - 0.14223284 + - 0.13930953 + - 0.14266565 + - 0.13980219 + - 0.14202453 + - 0.14010233 + - 0.14205298 + - 0.13910069 + - 0.14355478 + - 0.13863954 + - 0.14013106 + - 0.14137465 + - 0.13828081 + - 0 + pooledParticles: 0 +--- !u!114 &5505919189061892379 +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_aux + m_EditorClassIdentifier: + particleIndices: 01000000 + m_Blueprint: {fileID: 11400000} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Firehose.asset.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Firehose.asset.meta new file mode 100644 index 00000000..c2d251ae --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Firehose.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b2fe09b5a1ae2424597b4776dc36fa5c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Freightlift cable.asset b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Freightlift cable.asset new file mode 100644 index 00000000..8022bdff --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Freightlift cable.asset @@ -0,0 +1,2084 @@ +%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: 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.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.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} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {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, y: 0, z: 0, w: 1} + - {x: -0.88329995, 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} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + - {x: 0, y: 0, z: 0, w: 0} + 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} + angularVelocities: [] + invMasses: + - 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: 000000000100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + principalRadii: + - {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.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} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {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, 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: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f000000100000001000000011000000 + triangles: + distanceConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a000000 + m_ConstraintCount: 59 + m_ActiveConstraintCount: 9 + m_InitialActiveConstraintCount: 9 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.11670005 + - 0.11829093 + - 0.11783301 + - 0.1178735 + - 0.11774122 + - 0.117860526 + - 0.11788291 + - 0.11787611 + - 0.11705878 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f00000030000000310000003200000033000000340000003500000036000000370000003800000039000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f00000030000000310000003200000033000000340000003500000036000000370000003800000039000000 + m_ConstraintCount: 58 + m_ActiveConstraintCount: 8 + m_InitialActiveConstraintCount: 8 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.11680669 + - 0.117395446 + - 0.11791115 + - 0.117807046 + - 0.11778654 + - 0.11791558 + - 0.11756081 + - 0.11770154 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + m_AlignBytes: 16 + bendConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000210000002200000023000000240000002500000026000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000210000002200000023000000240000002500000026000000 + m_ConstraintCount: 39 + m_ActiveConstraintCount: 6 + m_InitialActiveConstraintCount: 6 + particleIndices: + serializedContents: 000000000200000001000000030000000500000004000000060000000800000007000000090000000b0000000a0000000c0000000e0000000d0000000f0000001100000010000000120000001400000013000000150000001700000016000000180000001a000000190000001b0000001d0000001c0000001e000000200000001f0000002100000023000000220000002400000026000000250000002700000029000000280000002a0000002c0000002b0000002d0000002f0000002e000000300000003200000031000000330000003500000034000000360000003800000037000000390000003b0000003a0000003c0000003e0000003d0000003f0000004100000040000000420000004400000043000000450000004700000046000000480000004a000000490000004b0000004d0000004c0000004e000000500000004f0000005100000053000000520000005400000056000000550000005700000059000000580000005a0000005c0000005b0000005d0000005f0000005e000000600000006200000061000000630000006500000064000000660000006800000067000000690000006b0000006a0000006c0000006e0000006d0000006f0000007100000070000000720000007400000073000000 + 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 + 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} + 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000210000002200000023000000240000002500000026000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000210000002200000023000000240000002500000026000000 + m_ConstraintCount: 39 + m_ActiveConstraintCount: 5 + m_InitialActiveConstraintCount: 5 + particleIndices: + serializedContents: 0100000003000000020000000400000006000000050000000700000009000000080000000a0000000c0000000b0000000d0000000f0000000e000000100000001200000011000000130000001500000014000000160000001800000017000000190000001b0000001a0000001c0000001e0000001d0000001f0000002100000020000000220000002400000023000000250000002700000026000000280000002a000000290000002b0000002d0000002c0000002e000000300000002f0000003100000033000000320000003400000036000000350000003700000039000000380000003a0000003c0000003b0000003d0000003f0000003e000000400000004200000041000000430000004500000044000000460000004800000047000000490000004b0000004a0000004c0000004e0000004d0000004f0000005100000050000000520000005400000053000000550000005700000056000000580000005a000000590000005b0000005d0000005c0000005e000000600000005f0000006100000063000000620000006400000066000000650000006700000069000000680000006a0000006c0000006b0000006d0000006f0000006e000000700000007200000071000000730000007500000074000000 + 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 + 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} + 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000 + m_ConstraintCount: 38 + m_ActiveConstraintCount: 5 + m_InitialActiveConstraintCount: 5 + particleIndices: + serializedContents: 020000000400000003000000050000000700000006000000080000000a000000090000000b0000000d0000000c0000000e000000100000000f0000001100000013000000120000001400000016000000150000001700000019000000180000001a0000001c0000001b0000001d0000001f0000001e000000200000002200000021000000230000002500000024000000260000002800000027000000290000002b0000002a0000002c0000002e0000002d0000002f0000003100000030000000320000003400000033000000350000003700000036000000380000003a000000390000003b0000003d0000003c0000003e000000400000003f0000004100000043000000420000004400000046000000450000004700000049000000480000004a0000004c0000004b0000004d0000004f0000004e000000500000005200000051000000530000005500000054000000560000005800000057000000590000005b0000005a0000005c0000005e0000005d0000005f0000006100000060000000620000006400000063000000650000006700000066000000680000006a000000690000006b0000006d0000006c0000006e000000700000006f000000710000007300000072000000 + 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 + 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} + 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} + m_AlignBytes: 16 + skinConstraintsData: + batches: [] + tetherConstraintsData: + batches: [] + stretchShearConstraintsData: + batches: [] + bendTwistConstraintsData: + batches: [] + shapeMatchingConstraintsData: + batches: [] + aerodynamicConstraintsData: + 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: + batches: [] + groups: + - {fileID: 1023878380947534591} + - {fileID: 2474621813314795683} + - {fileID: 1119723573710947368} + path: + m_Names: + - lower + - lower + - upper + m_Points: + data: + - tangentMode: 0 + inTangent: {x: -0.25, y: -0, z: -0} + position: {x: -1, y: 0, z: 0} + outTangent: {x: 0.026164055, y: 0, z: 0} + - tangentMode: 0 + inTangent: {x: -0.050680697, y: 0, z: 0} + position: {x: -0.88329995, y: 0, z: 0} + outTangent: {x: 0.4335778, y: 0, z: 0} + - tangentMode: 0 + inTangent: {x: -0.29470557, y: 0, z: -0.0020900369} + position: {x: 1, y: 0, z: 0} + outTangent: {x: 0.24999344, y: -0, z: 0.0017729407} + 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: 000000000100ffff0100ffff + m_Closed: 0 + m_ArcLengthTable: + - 0 + - 0.0038305505 + - 0.00784552 + - 0.012043051 + - 0.016421288 + - 0.020978373 + - 0.025712451 + - 0.030621663 + - 0.035704155 + - 0.040958066 + - 0.04638154 + - 0.05197273 + - 0.057729766 + - 0.063650794 + - 0.06973396 + - 0.075977415 + - 0.08237929 + - 0.08893773 + - 0.09565088 + - 0.10251689 + - 0.1095339 + - 0.116700046 + - 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: [] + OnControlPointAdded: + m_PersistentCalls: + m_Calls: [] + OnControlPointRemoved: + m_PersistentCalls: + m_Calls: [] + OnControlPointRenamed: + m_PersistentCalls: + m_Calls: [] + thickness: 0.05 + resolution: 0.4 + m_InterParticleDistance: 0.11764717 + totalParticles: 118 + m_RestLength: 13.764719 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f000000100000001000000011000000 + restLengths: + - 0.11670005 + - 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 +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: lower + m_EditorClassIdentifier: + particleIndices: 00000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &1119723573710947368 +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: upper + m_EditorClassIdentifier: + particleIndices: 11000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &2474621813314795683 +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: lower + m_EditorClassIdentifier: + particleIndices: 01000000 + m_Blueprint: {fileID: 11400000} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Freightlift cable.asset.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Freightlift cable.asset.meta new file mode 100644 index 00000000..352b0dbb --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Freightlift cable.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: df057526865004da9ac53f3c8bc43d9f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 1.asset b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 1.asset new file mode 100644 index 00000000..31becba2 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 1.asset @@ -0,0 +1,2266 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-4396955149452082975 +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 2 + m_EditorClassIdentifier: + particleIndices: 15000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-1514820099013862997 +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: control point + m_EditorClassIdentifier: + particleIndices: 0a000000 + 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: Joints rope 1 + m_EditorClassIdentifier: + m_Checksum: 3329514432 + m_Empty: 0 + m_Edited: 0 + m_ActiveParticleCount: 24 + m_InitialActiveParticleCount: 24 + _bounds: + m_Center: {x: -0.6924925, y: 0.46669987, z: 0} + m_Extent: {x: 0.6924925, y: 0.47054604, z: 0} + positions: + - {x: -1, y: 0, z: 0} + - {x: -0.9181425, y: -0.0017922054, z: 0} + - {x: -0.8362793, y: -0.0038461662, z: 0} + - {x: -0.7428325, y: -0.000871651, z: 0} + - {x: -0.65122014, y: 0.017367212, z: 0} + - {x: -0.5678503, y: 0.058998827, z: 0} + - {x: -0.50305676, y: 0.12584557, z: 0} + - {x: -0.4616526, y: 0.20902728, z: 0} + - {x: -0.43931282, y: 0.299705, z: 0} + - {x: -0.43052924, y: 0.39261803, z: 0} + - {x: -0.43119478, y: 0.48681656, z: 0} + - {x: -0.44271347, y: 0.58178604, z: 0} + - {x: -0.4703848, y: 0.67201185, z: 0} + - {x: -0.5176511, y: 0.7542874, z: 0} + - {x: -0.58389527, y: 0.8220633, z: 0} + - {x: -0.66438735, y: 0.8722328, z: 0} + - {x: -0.7532248, y: 0.90580136, z: 0} + - {x: -0.84615177, y: 0.9258487, z: 0} + - {x: -0.94080037, y: 0.9354944, z: 0} + - {x: -1.0359671, y: 0.9372459, z: 0} + - {x: -1.1310608, y: 0.93307537, z: 0} + - {x: -1.2255421, y: 0.9248221, z: 0} + - {x: -1.3052037, y: 0.91854113, z: 0} + - {x: -1.384985, y: 0.9144238, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {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, y: 0, z: 0, w: 1} + - {x: -0.9181425, y: -0.0017922054, z: 0, w: 1} + - {x: -0.8362793, y: -0.0038461662, z: 0, w: 1} + - {x: -0.7428325, y: -0.000871651, z: 0, w: 1} + - {x: -0.65122014, y: 0.017367212, z: 0, w: 1} + - {x: -0.5678503, y: 0.058998827, z: 0, w: 1} + - {x: -0.50305676, y: 0.12584557, z: 0, w: 1} + - {x: -0.4616526, y: 0.20902728, z: 0, w: 1} + - {x: -0.43931282, y: 0.299705, z: 0, w: 1} + - {x: -0.43052924, y: 0.39261803, z: 0, w: 1} + - {x: -0.43119478, y: 0.48681656, z: 0, w: 1} + - {x: -0.44271347, y: 0.58178604, z: 0, w: 1} + - {x: -0.4703848, y: 0.67201185, z: 0, w: 1} + - {x: -0.5176511, y: 0.7542874, z: 0, w: 1} + - {x: -0.58389527, y: 0.8220633, z: 0, w: 1} + - {x: -0.66438735, y: 0.8722328, z: 0, w: 1} + - {x: -0.7532248, y: 0.90580136, z: 0, w: 1} + - {x: -0.84615177, y: 0.9258487, z: 0, w: 1} + - {x: -0.94080037, y: 0.9354944, z: 0, w: 1} + - {x: -1.0359671, y: 0.9372459, z: 0, w: 1} + - {x: -1.1310608, y: 0.93307537, z: 0, w: 1} + - {x: -1.2255421, y: 0.9248221, z: 0, w: 1} + - {x: -1.3052037, y: 0.91854113, z: 0, w: 1} + - {x: -1.384985, y: 0.9144238, 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} + 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} + angularVelocities: [] + invMasses: + - 10 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 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: 010000000100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + principalRadii: + - {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.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} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {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, 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: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f000000100000001000000011000000110000001200000012000000130000001300000014000000140000001500000015000000160000001600000017000000 + triangles: + distanceConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d000000 + m_ConstraintCount: 62 + m_ActiveConstraintCount: 12 + m_InitialActiveConstraintCount: 12 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.08187712 + - 0.09349412 + - 0.0931865 + - 0.09291664 + - 0.09332729 + - 0.09566547 + - 0.09488609 + - 0.094846986 + - 0.09506482 + - 0.09518286 + - 0.09484102 + - 0.079887465 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c000000 + m_ConstraintCount: 61 + m_ActiveConstraintCount: 11 + m_InitialActiveConstraintCount: 11 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f0000001000000011000000120000001300000014000000150000001600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.08188899 + - 0.09341026 + - 0.09309505 + - 0.09338906 + - 0.09420088 + - 0.094373725 + - 0.094772704 + - 0.0949681 + - 0.09513883 + - 0.09518514 + - 0.07990884 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + m_AlignBytes: 16 + bendConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + m_ConstraintCount: 41 + m_ActiveConstraintCount: 8 + m_InitialActiveConstraintCount: 8 + particleIndices: + serializedContents: 000000000200000001000000030000000500000004000000060000000800000007000000090000000b0000000a0000000c0000000e0000000d0000000f0000001100000010000000120000001400000013000000150000001700000016000000180000001a000000190000001b0000001d0000001c0000001e000000200000001f0000002100000023000000220000002400000026000000250000002700000029000000280000002a0000002c0000002b0000002d0000002f0000002e000000300000003200000031000000330000003500000034000000360000003800000037000000390000003b0000003a0000003c0000003e0000003d0000003f0000004100000040000000420000004400000043000000450000004700000046000000480000004a000000490000004b0000004d0000004c0000004e000000500000004f0000005100000053000000520000005400000056000000550000005700000059000000580000005a0000005c0000005b0000005d0000005f0000005e000000600000006200000061000000630000006500000064000000660000006800000067000000690000006b0000006a0000006c0000006e0000006d0000006f0000007100000070000000720000007400000073000000750000007700000076000000780000007a00000079000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.00008727273 + - 0.008267463 + - 0.0068283984 + - 0.0036268497 + - 0.007961018 + - 0.0047086976 + - 0.0019741363 + - 0.000722321 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + m_ConstraintCount: 41 + m_ActiveConstraintCount: 7 + m_InitialActiveConstraintCount: 7 + particleIndices: + serializedContents: 0100000003000000020000000400000006000000050000000700000009000000080000000a0000000c0000000b0000000d0000000f0000000e000000100000001200000011000000130000001500000014000000160000001800000017000000190000001b0000001a0000001c0000001e0000001d0000001f0000002100000020000000220000002400000023000000250000002700000026000000280000002a000000290000002b0000002d0000002c0000002e000000300000002f0000003100000033000000320000003400000036000000350000003700000039000000380000003a0000003c0000003b0000003d0000003f0000003e000000400000004200000041000000430000004500000044000000460000004800000047000000490000004b0000004a0000004c0000004e0000004d0000004f0000005100000050000000520000005400000053000000550000005700000056000000580000005a000000590000005b0000005d0000005c0000005e000000600000005f0000006100000063000000620000006400000066000000650000006700000069000000680000006a0000006c0000006b0000006d0000006f0000006e000000700000007200000071000000730000007500000074000000760000007800000077000000790000007b0000007a000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.004209255 + - 0.010439668 + - 0.0045797634 + - 0.0056116274 + - 0.007549739 + - 0.0035144323 + - 0.0013761288 + - 0.5748621 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000250000002600000027000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000250000002600000027000000 + m_ConstraintCount: 40 + m_ActiveConstraintCount: 7 + m_InitialActiveConstraintCount: 7 + particleIndices: + serializedContents: 020000000400000003000000050000000700000006000000080000000a000000090000000b0000000d0000000c0000000e000000100000000f0000001100000013000000120000001400000016000000150000001700000019000000180000001a0000001c0000001b0000001d0000001f0000001e000000200000002200000021000000230000002500000024000000260000002800000027000000290000002b0000002a0000002c0000002e0000002d0000002f0000003100000030000000320000003400000033000000350000003700000036000000380000003a000000390000003b0000003d0000003c0000003e000000400000003f0000004100000043000000420000004400000046000000450000004700000049000000480000004a0000004c0000004b0000004d0000004f0000004e000000500000005200000051000000530000005500000054000000560000005800000057000000590000005b0000005a0000005c0000005e0000005d0000005f0000006100000060000000620000006400000063000000650000006700000066000000680000006a000000690000006b0000006d0000006c0000006e000000700000006f000000710000007300000072000000740000007600000075000000770000007900000078000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.0051247277 + - 0.009509616 + - 0.0031787315 + - 0.0070487917 + - 0.006193431 + - 0.0026370892 + - 0.0049834778 + - 0.55320823 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + skinConstraintsData: + batches: [] + tetherConstraintsData: + batches: [] + stretchShearConstraintsData: + batches: [] + bendTwistConstraintsData: + batches: [] + shapeMatchingConstraintsData: + batches: [] + aerodynamicConstraintsData: + 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: + batches: [] + groups: + - {fileID: 7605297887885229143} + - {fileID: 1364724456080004343} + - {fileID: -1514820099013862997} + - {fileID: -4396955149452082975} + - {fileID: 4437340670510581073} + path: + m_Names: + - start + - start 2 + - control point + - end 2 + - end + m_Points: + data: + - tangentMode: 0 + inTangent: {x: -0.25, y: -0, z: -0} + position: {x: -1, y: 0, z: 0} + outTangent: {x: 0.024930835, y: 0, z: 0} + - tangentMode: 0 + inTangent: {x: -0.04374349, y: 0.00084798643, z: 0} + position: {x: -0.8362793, y: -0.0038461662, z: 0} + outTangent: {x: 0.18454581, y: -0.0035774955, z: 0} + - tangentMode: 0 + inTangent: {x: 0.021781076, y: -0.4595474, z: -0} + position: {x: -0.43119478, y: 0.48681656, z: 0} + outTangent: {x: -0.023585707, y: 0.49762234, z: 0} + - tangentMode: 0 + inTangent: {x: 0.2562952, y: 0.026030779, z: 0} + position: {x: -1.2255421, y: 0.9248221, z: 0} + outTangent: {x: -0.05107057, y: -0.005186975, z: 0} + - tangentMode: 0 + inTangent: {x: 0.019917846, y: 0.00032430887, z: 0} + position: {x: -1.384985, y: 0.9144238, z: 0} + outTangent: {x: -0.24996696, y: -0.0040700436, z: -0} + 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} + 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} + m_Thickness: + data: + - 1 + - 1 + - 1 + - 1 + - 1 + m_Masses: + data: + - 0.1 + - 0.10000001 + - 0.1 + - 0.1 + - 0.1 + m_RotationalMasses: + data: + - 1 + - 1 + - 1 + - 1 + - 1 + m_Filters: + data: 010000000100ffff0100ffff0100ffff01000000 + m_Closed: 0 + m_ArcLengthTable: + - 0 + - 0.004025475 + - 0.008926518 + - 0.014624583 + - 0.021041036 + - 0.028097207 + - 0.035714407 + - 0.043813925 + - 0.052317053 + - 0.06114507 + - 0.070219256 + - 0.0794609 + - 0.08879125 + - 0.098131604 + - 0.10740323 + - 0.11652741 + - 0.1254254 + - 0.1340185 + - 0.14222798 + - 0.14997512 + - 0.15718122 + - 0.16376756 + - 0.19049099 + - 0.21779743 + - 0.24551307 + - 0.27349094 + - 0.30161864 + - 0.32982728 + - 0.35810137 + - 0.38648945 + - 0.4151139 + - 0.44417837 + - 0.47397035 + - 0.50485677 + - 0.53727233 + - 0.571702 + - 0.60866076 + - 0.64867496 + - 0.6922677 + - 0.7399492 + - 0.79221183 + - 0.8495281 + - 0.9123513 + - 0.9802401 + - 1.0422704 + - 1.0995182 + - 1.1530643 + - 1.203949 + - 1.2531172 + - 1.3013681 + - 1.3493214 + - 1.3974055 + - 1.4458663 + - 1.4947882 + - 1.5441198 + - 1.5937006 + - 1.6432831 + - 1.6925515 + - 1.741137 + - 1.7886293 + - 1.8345858 + - 1.8785386 + - 1.9200003 + - 1.9584689 + - 1.9660437 + - 1.9740559 + - 1.9824371 + - 1.991119 + - 2.0000331 + - 2.009111 + - 2.0182838 + - 2.0274832 + - 2.0366406 + - 2.0456874 + - 2.054555 + - 2.0631745 + - 2.0714777 + - 2.0793955 + - 2.0868597 + - 2.0938015 + - 2.1001523 + - 2.1058435 + - 2.1108065 + - 2.1149728 + - 2.118274 + m_TotalSplineLenght: 2.118274 + 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.5 + m_InterParticleDistance: 0.09209887 + totalParticles: 124 + m_RestLength: 11.325401 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f000000100000001000000011000000110000001200000012000000130000001300000014000000140000001500000015000000160000001600000017000000 + restLengths: + - 0.08187712 + - 0.08188899 + - 0.09349412 + - 0.09341026 + - 0.0931865 + - 0.09309505 + - 0.09291664 + - 0.09338906 + - 0.09332729 + - 0.09420088 + - 0.09566547 + - 0.094373725 + - 0.09488609 + - 0.094772704 + - 0.094846986 + - 0.0949681 + - 0.09506482 + - 0.09513883 + - 0.09518286 + - 0.09518514 + - 0.09484102 + - 0.07990884 + - 0.079887465 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0.09209887 + - 0 + pooledParticles: 100 +--- !u!114 &1364724456080004343 +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 2 + m_EditorClassIdentifier: + particleIndices: 02000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &4437340670510581073 +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: 17000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &7605297887885229143 +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} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 1.asset.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 1.asset.meta new file mode 100644 index 00000000..2fddc59e --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 1.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aa522e16fa3d944afa90688caef811d1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 2.asset b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 2.asset new file mode 100644 index 00000000..4624dbcf --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 2.asset @@ -0,0 +1,2100 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-981642940510787340 +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 2 + m_EditorClassIdentifier: + particleIndices: 02000000 + 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: Joints rope 2 + m_EditorClassIdentifier: + m_Checksum: 4251140477 + m_Empty: 0 + m_Edited: 0 + m_ActiveParticleCount: 16 + m_InitialActiveParticleCount: 16 + _bounds: + m_Center: {x: -0.3423946, y: 0.00000009918483, z: 0} + m_Extent: {x: 0.6255208, y: 0.0000002852554, z: 0} + positions: + - {x: -0.96791536, y: 0.00000002242149, z: 0} + - {x: -0.9170059, y: 0.000000022228832, z: 0} + - {x: -0.866058, y: 0.00000003456384, z: 0} + - {x: -0.7729056, y: 0.00000006882797, z: 0} + - {x: -0.6792198, y: 0.00000010421619, z: 0} + - {x: -0.5856509, y: 0.00000013999316, z: 0} + - {x: -0.49212816, y: 0.00000017596865, z: 0} + - {x: -0.3985229, y: 0.00000021205727, z: 0} + - {x: -0.3049661, y: 0.00000024809484, z: 0} + - {x: -0.21125059, y: 0.00000028403042, z: 0} + - {x: -0.11759536, y: 0.00000031957384, z: 0} + - {x: -0.024137007, y: 0.0000003541975, z: 0} + - {x: 0.06891826, y: 0.00000038444023, z: 0} + - {x: 0.15384081, y: 0.00000037588666, z: 0} + - {x: 0.21290737, y: 0.000000044285034, z: 0} + - {x: 0.28312624, y: -0.00000018607057, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {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.96791536, y: 0.00000002242149, z: 0, w: 1} + - {x: -0.9170059, y: 0.000000022228832, z: 0, w: 1} + - {x: -0.866058, y: 0.00000003456384, z: 0, w: 1} + - {x: -0.7729056, y: 0.00000006882797, z: 0, w: 1} + - {x: -0.6792198, y: 0.00000010421619, z: 0, w: 1} + - {x: -0.5856509, y: 0.00000013999316, z: 0, w: 1} + - {x: -0.49212816, y: 0.00000017596865, z: 0, w: 1} + - {x: -0.3985229, y: 0.00000021205727, z: 0, w: 1} + - {x: -0.3049661, y: 0.00000024809484, z: 0, w: 1} + - {x: -0.21125059, y: 0.00000028403042, z: 0, w: 1} + - {x: -0.11759536, y: 0.00000031957384, z: 0, w: 1} + - {x: -0.024137007, y: 0.0000003541975, z: 0, w: 1} + - {x: 0.06891826, y: 0.00000038444023, z: 0, w: 1} + - {x: 0.15384081, y: 0.00000037588666, z: 0, w: 1} + - {x: 0.21290737, y: 0.000000044285034, z: 0, w: 1} + - {x: 0.28312624, y: -0.00000018607057, 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} + 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} + angularVelocities: [] + invMasses: + - 10 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 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: 010000000100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100fdff0100fdff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + principalRadii: + - {x: 0.05, y: 0.05, z: 0.05} + - {x: 0.05000001, y: 0.05000001, z: 0.05000001} + - {x: 0.05000001, y: 0.05000001, z: 0.05000001} + - {x: 0.05000001, y: 0.05000001, z: 0.05000001} + - {x: 0.05000001, y: 0.05000001, z: 0.05000001} + - {x: 0.05000001, y: 0.05000001, z: 0.05000001} + - {x: 0.05000001, y: 0.05000001, z: 0.05000001} + - {x: 0.05000001, y: 0.05000001, z: 0.05000001} + - {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} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {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, 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: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f000000 + triangles: + distanceConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f00000030000000310000003200000033000000340000003500000036000000370000003800000039000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f00000030000000310000003200000033000000340000003500000036000000370000003800000039000000 + m_ConstraintCount: 58 + m_ActiveConstraintCount: 8 + m_InitialActiveConstraintCount: 8 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.05090946 + - 0.093152404 + - 0.09356886 + - 0.09360525 + - 0.093715504 + - 0.093458354 + - 0.08492255 + - 0.07021886 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000 + m_ConstraintCount: 57 + m_ActiveConstraintCount: 7 + m_InitialActiveConstraintCount: 7 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.050947905 + - 0.093685806 + - 0.09352276 + - 0.09355682 + - 0.09365523 + - 0.09305526 + - 0.059066564 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + m_AlignBytes: 16 + bendConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000 + m_ConstraintCount: 38 + m_ActiveConstraintCount: 5 + m_InitialActiveConstraintCount: 5 + particleIndices: + serializedContents: 000000000200000001000000030000000500000004000000060000000800000007000000090000000b0000000a0000000c0000000e0000000d0000000f0000001100000010000000120000001400000013000000150000001700000016000000180000001a000000190000001b0000001d0000001c0000001e000000200000001f0000002100000023000000220000002400000026000000250000002700000029000000280000002a0000002c0000002b0000002d0000002f0000002e000000300000003200000031000000330000003500000034000000360000003800000037000000390000003b0000003a0000003c0000003e0000003d0000003f0000004100000040000000420000004400000043000000450000004700000046000000480000004a000000490000004b0000004d0000004c0000004e000000500000004f0000005100000053000000520000005400000056000000550000005700000059000000580000005a0000005c0000005b0000005d0000005f0000005e000000600000006200000061000000630000006500000064000000660000006800000067000000690000006b0000006a0000006c0000006e0000006d0000006f0000007100000070000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.000012755395 + - 0.000038981438 + - 0.000016152859 + - 0.00006561726 + - 0.008618668 + - 0.09437541 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000 + m_ConstraintCount: 38 + m_ActiveConstraintCount: 5 + m_InitialActiveConstraintCount: 5 + particleIndices: + serializedContents: 0100000003000000020000000400000006000000050000000700000009000000080000000a0000000c0000000b0000000d0000000f0000000e000000100000001200000011000000130000001500000014000000160000001800000017000000190000001b0000001a0000001c0000001e0000001d0000001f0000002100000020000000220000002400000023000000250000002700000026000000280000002a000000290000002b0000002d0000002c0000002e000000300000002f0000003100000033000000320000003400000036000000350000003700000039000000380000003a0000003c0000003b0000003d0000003f0000003e000000400000004200000041000000430000004500000044000000460000004800000047000000490000004b0000004a0000004c0000004e0000004d0000004f0000005100000050000000520000005400000053000000550000005700000056000000580000005a000000590000005b0000005d0000005c0000005e000000600000005f0000006100000063000000620000006400000066000000650000006700000069000000680000006a0000006c0000006b0000006d0000006f0000006e000000700000007200000071000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.014068186 + - 0.000015377998 + - 0.000052899122 + - 0.00013436191 + - 0.0037174374 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000 + m_ConstraintCount: 38 + m_ActiveConstraintCount: 4 + m_InitialActiveConstraintCount: 4 + particleIndices: + serializedContents: 020000000400000003000000050000000700000006000000080000000a000000090000000b0000000d0000000c0000000e000000100000000f0000001100000013000000120000001400000016000000150000001700000019000000180000001a0000001c0000001b0000001d0000001f0000001e000000200000002200000021000000230000002500000024000000260000002800000027000000290000002b0000002a0000002c0000002e0000002d0000002f0000003100000030000000320000003400000033000000350000003700000036000000380000003a000000390000003b0000003d0000003c0000003e000000400000003f0000004100000043000000420000004400000046000000450000004700000049000000480000004a0000004c0000004b0000004d0000004f0000004e000000500000005200000051000000530000005500000054000000560000005800000057000000590000005b0000005a0000005c0000005e0000005d0000005f0000006100000060000000620000006400000063000000650000006700000066000000680000006a000000690000006b0000006d0000006c0000006e000000700000006f000000710000007300000072000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.00017780066 + - 0.000027477741 + - 0.000020101666 + - 0.0027109012 + - 0.1177817 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + skinConstraintsData: + batches: [] + tetherConstraintsData: + batches: [] + stretchShearConstraintsData: + batches: [] + bendTwistConstraintsData: + batches: [] + shapeMatchingConstraintsData: + batches: [] + aerodynamicConstraintsData: + 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: + batches: [] + groups: + - {fileID: 2668437529162069470} + - {fileID: -981642940510787340} + - {fileID: 8493842404228815792} + - {fileID: 6085013363271969740} + path: + m_Names: + - start + - start 2 + - control point + - end + m_Points: + data: + - tangentMode: 0 + inTangent: {x: -0.25, y: -6.072737e-14, z: -0} + position: {x: -0.96791536, y: 0.00000002242149, z: 0} + outTangent: {x: 0.0073128343, y: 1.7763568e-15, z: 0} + - tangentMode: 0 + inTangent: {x: -0.05692005, y: -0.000000020428896, z: 0} + position: {x: -0.866058, y: 0.00000003456384, z: 0} + outTangent: {x: 0.25245947, y: 0.00000009060889, z: 0} + - tangentMode: 0 + inTangent: {x: -0.050469868, y: -0.000000006016478, z: 0} + position: {x: 0.06891826, y: 0.00000038444023, z: 0} + outTangent: {x: 0.3271593, y: 0.00000003900043, z: -0} + - tangentMode: 0 + inTangent: {x: -0.21025208, y: 0, z: 0} + position: {x: 0.28312624, y: -0.00000018607057, z: 0} + 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, 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, g: 1, b: 1, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + m_Thickness: + data: + - 1 + - 1.0000001 + - 1 + - 1 + m_Masses: + data: + - 0.1 + - 0.10000001 + - 0.10000001 + - 0.1 + m_RotationalMasses: + data: + - 1 + - 1.0000001 + - 1 + - 1 + m_Filters: + data: 010000000100ffff0100ffff0100fdff + m_Closed: 0 + m_ArcLengthTable: + - 0 + - 0.0012497028 + - 0.0029046717 + - 0.00495777 + - 0.0074018603 + - 0.0102298055 + - 0.01343447 + - 0.017008714 + - 0.020945402 + - 0.025237396 + - 0.02987756 + - 0.03485876 + - 0.04017385 + - 0.045815703 + - 0.051777177 + - 0.05805113 + - 0.064630434 + - 0.071507946 + - 0.07867653 + - 0.086129054 + - 0.093858376 + - 0.10185736 + - 0.14040144 + - 0.18348725 + - 0.23049209 + - 0.28079322 + - 0.33376795 + - 0.38879356 + - 0.4452473 + - 0.5025065 + - 0.5599484 + - 0.6169503 + - 0.6728895 + - 0.72714317 + - 0.77908874 + - 0.8281034 + - 0.87356454 + - 0.91484934 + - 0.95133513 + - 0.98239917 + - 1.0074188 + - 1.0257711 + - 1.0368336 + - 1.0792743 + - 1.1136334 + - 1.140678 + - 1.1611751 + - 1.1758915 + - 1.1855943 + - 1.1910505 + - 1.193027 + - 1.1938615 + - 1.1965435 + - 1.2004042 + - 1.2046767 + - 1.2085941 + - 1.2113893 + - 1.2123283 + - 1.2140783 + - 1.2192513 + - 1.2286143 + - 1.2429343 + - 1.2629783 + - 1.2895132 + m_TotalSplineLenght: 1.2895132 + 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.5 + m_InterParticleDistance: 0.08596755 + totalParticles: 116 + m_RestLength: 9.847806 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f000000 + restLengths: + - 0.05090946 + - 0.050947905 + - 0.093152404 + - 0.093685806 + - 0.09356886 + - 0.09352276 + - 0.09360525 + - 0.09355682 + - 0.093715504 + - 0.09365523 + - 0.093458354 + - 0.09305526 + - 0.08492255 + - 0.059066564 + - 0.07021886 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0.08596755 + - 0 + pooledParticles: 100 +--- !u!114 &2668437529162069470 +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 &6085013363271969740 +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: 0f000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &8493842404228815792 +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: control point + m_EditorClassIdentifier: + particleIndices: 0c000000 + m_Blueprint: {fileID: 11400000} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 2.asset.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 2.asset.meta new file mode 100644 index 00000000..b26597de --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 2.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 26f4e1ad2bfa7442fa1380d8f5ea809b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Plectoneme rod.asset b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Plectoneme rod.asset new file mode 100644 index 00000000..be8d8ec8 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Plectoneme rod.asset @@ -0,0 +1,1103 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-3402949915523605302 +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: 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: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 1, y: 0, z: 0} + positions: + - {x: -1, y: 0, z: 0} + - {x: -0.95067745, y: 0, z: 0} + - {x: -0.9003746, y: 0, z: 0} + - {x: -0.8514858, y: 0, z: 0} + - {x: -0.8011474, y: 0, z: 0} + - {x: -0.75065655, y: 0, z: 0} + - {x: -0.70117325, y: 0, z: 0} + - {x: -0.6503389, y: 0, z: 0} + - {x: -0.6009832, y: 0, z: 0} + - {x: -0.55040324, y: 0, z: 0} + - {x: -0.5007351, y: 0, z: 0} + - {x: -0.4505338, y: 0, z: 0} + - {x: -0.40043044, y: 0, z: 0} + - {x: -0.3505471, y: 0, z: 0} + - {x: -0.30011013, y: 0, z: 0} + - {x: -0.25040564, y: 0, z: 0} + - {x: -0.2001485, y: 0, z: 0} + - {x: -0.15017988, y: 0, z: 0} + - {x: -0.10015966, y: 0, z: 0} + - {x: -0.05000988, y: 0, z: 0} + - {x: -0.000000039115545, y: 0, z: 0} + - {x: 0.050009605, y: 0, z: 0} + - {x: 0.10015938, y: 0, z: 0} + - {x: 0.15017985, y: 0, z: 0} + - {x: 0.20014846, y: 0, z: 0} + - {x: 0.25040546, y: 0, z: 0} + - {x: 0.30010998, y: 0, z: 0} + - {x: 0.35054696, y: 0, z: 0} + - {x: 0.4004303, y: 0, z: 0} + - {x: 0.45053366, y: 0, z: 0} + - {x: 0.500735, y: 0, z: 0} + - {x: 0.55040324, y: 0, z: 0} + - {x: 0.6009831, y: 0, z: 0} + - {x: 0.65033865, y: 0, z: 0} + - {x: 0.7011731, y: 0, z: 0} + - {x: 0.7506564, y: 0, z: 0} + - {x: 0.8011474, y: 0, z: 0} + - {x: 0.8514858, y: 0, z: 0} + - {x: 0.90037465, y: 0, z: 0} + - {x: 0.95067745, y: 0, z: 0} + - {x: 1, y: 0, z: 0} + restPositions: + - {x: -1, y: 0, z: 0, w: 1} + - {x: -0.95067745, y: 0, z: 0, w: 1} + - {x: -0.9003746, y: 0, z: 0, w: 1} + - {x: -0.8514858, y: 0, z: 0, w: 1} + - {x: -0.8011474, y: 0, z: 0, w: 1} + - {x: -0.75065655, y: 0, z: 0, w: 1} + - {x: -0.70117325, y: 0, z: 0, w: 1} + - {x: -0.6503389, y: 0, z: 0, w: 1} + - {x: -0.6009832, y: 0, z: 0, w: 1} + - {x: -0.55040324, y: 0, z: 0, w: 1} + - {x: -0.5007351, y: 0, z: 0, w: 1} + - {x: -0.4505338, y: 0, z: 0, w: 1} + - {x: -0.40043044, y: 0, z: 0, w: 1} + - {x: -0.3505471, y: 0, z: 0, w: 1} + - {x: -0.30011013, y: 0, z: 0, w: 1} + - {x: -0.25040564, y: 0, z: 0, w: 1} + - {x: -0.2001485, y: 0, z: 0, w: 1} + - {x: -0.15017988, y: 0, z: 0, w: 1} + - {x: -0.10015966, y: 0, z: 0, w: 1} + - {x: -0.05000988, y: 0, z: 0, w: 1} + - {x: -0.000000039115545, y: 0, z: 0, w: 1} + - {x: 0.050009605, y: 0, z: 0, w: 1} + - {x: 0.10015938, y: 0, z: 0, w: 1} + - {x: 0.15017985, y: 0, z: 0, w: 1} + - {x: 0.20014846, y: 0, z: 0, w: 1} + - {x: 0.25040546, y: 0, z: 0, w: 1} + - {x: 0.30010998, y: 0, z: 0, w: 1} + - {x: 0.35054696, y: 0, z: 0, w: 1} + - {x: 0.4004303, y: 0, z: 0, w: 1} + - {x: 0.45053366, y: 0, z: 0, w: 1} + - {x: 0.500735, y: 0, z: 0, w: 1} + - {x: 0.55040324, y: 0, z: 0, w: 1} + - {x: 0.6009831, y: 0, z: 0, w: 1} + - {x: 0.65033865, y: 0, z: 0, w: 1} + - {x: 0.7011731, y: 0, z: 0, w: 1} + - {x: 0.7506564, y: 0, z: 0, w: 1} + - {x: 0.8011474, y: 0, z: 0, w: 1} + - {x: 0.8514858, y: 0, z: 0, w: 1} + - {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} + orientations: + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + restOrientations: + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + - {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + 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: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + invMasses: + - 10 + - 10 + - 10.000001 + - 9.999999 + - 10 + - 10 + - 9.999999 + - 9.999999 + - 10.000001 + - 10.000001 + - 10 + - 10 + - 10 + - 10 + - 10.000001 + - 10.000001 + - 10.000001 + - 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 + invRotationalMasses: + - 100 + - 100 + - 100.000015 + - 100 + - 100 + - 100 + - 100 + - 100 + - 100.000015 + - 100.000015 + - 100 + - 100 + - 100 + - 100 + - 100.000015 + - 100.000015 + - 100.000015 + - 100.000015 + - 99.99999 + - 99.99999 + - 100.000015 + - 100 + - 100 + - 100 + - 100 + - 100 + - 100 + - 100 + - 100 + - 100 + - 100 + - 100 + - 100 + - 100 + - 100 + - 100 + - 100 + - 100 + - 100 + - 100 + - 100 + filters: 0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff + principalRadii: + - {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.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.049999997, y: 0.049999997, z: 0.049999997} + - {x: 0.049999997, y: 0.049999997, z: 0.049999997} + - {x: 0.049999997, y: 0.049999997, z: 0.049999997} + - {x: 0.049999997, y: 0.049999997, z: 0.049999997} + - {x: 0.05000001, y: 0.05000001, z: 0.05000001} + - {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.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.05, y: 0.05, z: 0.05} + colors: + - {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, 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, 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: 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} + points: + edges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f0000002000000020000000210000002100000022000000220000002300000023000000240000002400000025000000250000002600000026000000270000002700000028000000 + triangles: + distanceConstraintsData: + batches: [] + bendConstraintsData: + batches: [] + skinConstraintsData: + batches: [] + tetherConstraintsData: + batches: [] + stretchShearConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013000000 + m_ConstraintCount: 20 + m_ActiveConstraintCount: 20 + m_InitialActiveConstraintCount: 20 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000250000002600000027000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + orientationIndices: + serializedContents: 00000000020000000400000006000000080000000a0000000c0000000e00000010000000120000001400000016000000180000001a0000001c0000001e00000020000000220000002400000026000000 + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.049322546 + - 0.048888803 + - 0.050490856 + - 0.050834358 + - 0.050579965 + - 0.050201297 + - 0.049883336 + - 0.049704492 + - 0.049968615 + - 0.05014978 + - 0.05000964 + - 0.05002047 + - 0.050256997 + - 0.050436974 + - 0.050103366 + - 0.049668252 + - 0.049355567 + - 0.0494833 + - 0.050338387 + - 0.050302804 + m_AlignBytes: 16 + restOrientations: + serializedContents: + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + m_AlignBytes: 16 + stiffnesses: + serializedContents: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013000000 + m_ConstraintCount: 20 + m_ActiveConstraintCount: 20 + m_InitialActiveConstraintCount: 20 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + orientationIndices: + serializedContents: 01000000030000000500000007000000090000000b0000000d0000000f00000011000000130000001500000017000000190000001b0000001d0000001f00000021000000230000002500000027000000 + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.050302863 + - 0.050338387 + - 0.0494833 + - 0.049355686 + - 0.049668133 + - 0.050103366 + - 0.050436974 + - 0.050257146 + - 0.050020218 + - 0.050009843 + - 0.050149772 + - 0.049968615 + - 0.049704522 + - 0.049883336 + - 0.050201327 + - 0.050579846 + - 0.050834477 + - 0.050490975 + - 0.048888862 + - 0.049322546 + m_AlignBytes: 16 + restOrientations: + serializedContents: + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + m_AlignBytes: 16 + stiffnesses: + serializedContents: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + m_AlignBytes: 16 + bendTwistConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013000000 + m_ConstraintCount: 20 + m_ActiveConstraintCount: 20 + m_InitialActiveConstraintCount: 20 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000250000002600000027000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restDarbouxVectors: + serializedContents: + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + m_AlignBytes: 16 + stiffnesses: + serializedContents: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013000000 + m_ConstraintCount: 20 + m_ActiveConstraintCount: 20 + m_InitialActiveConstraintCount: 20 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restDarbouxVectors: + serializedContents: + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + - {x: 0, y: 0, z: 0, w: 1.0000001} + m_AlignBytes: 16 + stiffnesses: + serializedContents: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 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} + m_AlignBytes: 16 + shapeMatchingConstraintsData: + batches: [] + aerodynamicConstraintsData: + 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 + m_IDToIndex: 00000000 + m_ConstraintCount: 1 + m_ActiveConstraintCount: 1 + m_InitialActiveConstraintCount: 1 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + firstParticle: + serializedContents: 00000000 + m_AlignBytes: 16 + numParticles: + serializedContents: 29000000 + m_AlignBytes: 16 + lengths: + serializedContents: + - {x: 0.049999997, y: 0.049999997} + m_AlignBytes: 16 + volumeConstraintsData: + batches: [] + groups: + - {fileID: -3402949915523605302} + - {fileID: 5048701005528565804} + path: + m_Names: + - start + - end + m_Points: + data: + - 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} + - 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: + - 0.01 + - 0.01 + m_Filters: + data: 0100ffff0100ffff + m_Closed: 0 + m_ArcLengthTable: + - 0 + - 0.043947738 + - 0.103282586 + - 0.17638485 + - 0.26163483 + - 0.35741282 + - 0.46209916 + - 0.5740741 + - 0.691718 + - 0.8134111 + - 0.9375338 + - 1.0624664 + - 1.186589 + - 1.3082821 + - 1.425926 + - 1.5379009 + - 1.6425872 + - 1.7383652 + - 1.8236151 + - 1.8967173 + - 1.9560522 + - 1.9999999 + m_TotalSplineLenght: 1.9999999 + OnPathChanged: + m_PersistentCalls: + m_Calls: [] + OnControlPointAdded: + m_PersistentCalls: + m_Calls: [] + OnControlPointRemoved: + m_PersistentCalls: + m_Calls: [] + OnControlPointRenamed: + m_PersistentCalls: + m_Calls: [] + thickness: 0.05 + resolution: 1 + m_InterParticleDistance: 0.049999997 + totalParticles: 41 + m_RestLength: 1.9999998 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f0000002000000020000000210000002100000022000000220000002300000023000000240000002400000025000000250000002600000026000000270000002700000028000000 + restLengths: + - 0.049322546 + - 0.050302863 + - 0.048888803 + - 0.050338387 + - 0.050490856 + - 0.0494833 + - 0.050834358 + - 0.049355686 + - 0.050579965 + - 0.049668133 + - 0.050201297 + - 0.050103366 + - 0.049883336 + - 0.050436974 + - 0.049704492 + - 0.050257146 + - 0.049968615 + - 0.050020218 + - 0.05014978 + - 0.050009843 + - 0.05000964 + - 0.050149772 + - 0.05002047 + - 0.049968615 + - 0.050256997 + - 0.049704522 + - 0.050436974 + - 0.049883336 + - 0.050103366 + - 0.050201327 + - 0.049668252 + - 0.050579846 + - 0.049355567 + - 0.050834477 + - 0.0494833 + - 0.050490975 + - 0.050338387 + - 0.048888862 + - 0.050302804 + - 0.049322546 + - 0 + keepInitialShape: 1 +--- !u!114 &5048701005528565804 +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: 28000000 + m_Blueprint: {fileID: 11400000} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Plectoneme rod.asset.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Plectoneme rod.asset.meta new file mode 100644 index 00000000..77dc627a --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Plectoneme rod.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 74806658f50d141e88786022b12fc58b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Snake.asset b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Snake.asset new file mode 100644 index 00000000..d6296e74 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Snake.asset @@ -0,0 +1,2219 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-8947839251049029312 +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: control point + m_EditorClassIdentifier: + particleIndices: 06000000 + 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: Snake + m_EditorClassIdentifier: + m_Checksum: 1208839425 + m_Empty: 0 + m_Edited: 0 + m_ActiveParticleCount: 27 + m_InitialActiveParticleCount: 27 + _bounds: + m_Center: {x: 2.0497563, y: 0, z: -0.00000012766169} + m_Extent: {x: 2.0571842, y: 0, z: 0.00000012766169} + positions: + - {x: -0.007427931, y: 0, z: -0.00000009307402} + - {x: 0.14501616, y: 0, z: -0.00000009774494} + - {x: 0.297919, y: 0, z: -0.00000010468507} + - {x: 0.45081714, y: 0, z: -0.000000112701954} + - {x: 0.6038084, y: 0, z: -0.00000012152721} + - {x: 0.7569245, y: 0, z: -0.00000013102466} + - {x: 0.90982604, y: 0, z: -0.00000014108508} + - {x: 1.0701945, y: 0, z: -0.00000015173066} + - {x: 1.2301809, y: 0, z: -0.00000016197734} + - {x: 1.3897502, y: 0, z: -0.00000017181746} + - {x: 1.5495242, y: 0, z: -0.00000018128003} + - {x: 1.7097893, y: 0, z: -0.00000019036702} + - {x: 1.8697371, y: 0, z: -0.0000001990168} + - {x: 2.029385, y: 0, z: -0.00000020721433} + - {x: 2.1887727, y: 0, z: -0.00000021494152} + - {x: 2.3489306, y: 0, z: -0.00000022221836} + - {x: 2.509104, y: 0, z: -0.00000022897227} + - {x: 2.6691413, y: 0, z: -0.00000023515372} + - {x: 2.8290925, y: 0, z: -0.00000024070994} + - {x: 2.9890022, y: 0, z: -0.00000024557002} + - {x: 3.1488738, y: 0, z: -0.00000024963612} + - {x: 3.3086195, y: 0, z: -0.0000002527697} + - {x: 3.467941, y: 0, z: -0.0000002547685} + - {x: 3.6282763, y: 0, z: -0.00000025532339} + - {x: 3.7882967, y: 0, z: -0.00000025385435} + - {x: 3.9485095, y: 0, z: -0.00000024915627} + - {x: 4.1069407, y: 0, z: -0.00000023759115} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {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.007427931, y: 0, z: -0.00000009307402, w: 1} + - {x: 0.14501616, y: 0, z: -0.00000009774494, w: 1} + - {x: 0.297919, y: 0, z: -0.00000010468507, w: 1} + - {x: 0.45081714, y: 0, z: -0.000000112701954, w: 1} + - {x: 0.6038084, y: 0, z: -0.00000012152721, w: 1} + - {x: 0.7569245, y: 0, z: -0.00000013102466, w: 1} + - {x: 0.90982604, y: 0, z: -0.00000014108508, w: 1} + - {x: 1.0701945, y: 0, z: -0.00000015173066, w: 1} + - {x: 1.2301809, y: 0, z: -0.00000016197734, w: 1} + - {x: 1.3897502, y: 0, z: -0.00000017181746, w: 1} + - {x: 1.5495242, y: 0, z: -0.00000018128003, w: 1} + - {x: 1.7097893, y: 0, z: -0.00000019036702, w: 1} + - {x: 1.8697371, y: 0, z: -0.0000001990168, w: 1} + - {x: 2.029385, y: 0, z: -0.00000020721433, w: 1} + - {x: 2.1887727, y: 0, z: -0.00000021494152, w: 1} + - {x: 2.3489306, y: 0, z: -0.00000022221836, w: 1} + - {x: 2.509104, y: 0, z: -0.00000022897227, w: 1} + - {x: 2.6691413, y: 0, z: -0.00000023515372, w: 1} + - {x: 2.8290925, y: 0, z: -0.00000024070994, w: 1} + - {x: 2.9890022, y: 0, z: -0.00000024557002, w: 1} + - {x: 3.1488738, y: 0, z: -0.00000024963612, w: 1} + - {x: 3.3086195, y: 0, z: -0.0000002527697, w: 1} + - {x: 3.467941, y: 0, z: -0.0000002547685, w: 1} + - {x: 3.6282763, y: 0, z: -0.00000025532339, w: 1} + - {x: 3.7882967, y: 0, z: -0.00000025385435, w: 1} + - {x: 3.9485095, y: 0, z: -0.00000024915627, w: 1} + - {x: 4.1069407, y: 0, z: -0.00000023759115, 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} + 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} + angularVelocities: [] + invMasses: + - 10 + - 9.999999 + - 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 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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: 0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + principalRadii: + - {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.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.09973421, y: 0.09973421, z: 0.09973421} + - {x: 0.09894752, y: 0.09894752, z: 0.09894752} + - {x: 0.09765602, y: 0.09765602, z: 0.09765602} + - {x: 0.095867686, y: 0.095867686, z: 0.095867686} + - {x: 0.09358821, y: 0.09358821, z: 0.09358821} + - {x: 0.09084066, y: 0.09084066, z: 0.09084066} + - {x: 0.08764027, y: 0.08764027, z: 0.08764027} + - {x: 0.0840021, y: 0.0840021, z: 0.0840021} + - {x: 0.07991518, y: 0.07991518, z: 0.07991518} + - {x: 0.07541204, y: 0.07541204, z: 0.07541204} + - {x: 0.0705164, y: 0.0705164, z: 0.0705164} + - {x: 0.06525022, y: 0.06525022, z: 0.06525022} + - {x: 0.059640873, y: 0.059640873, z: 0.059640873} + - {x: 0.053725798, y: 0.053725798, z: 0.053725798} + - {x: 0.04756058, y: 0.04756058, z: 0.04756058} + - {x: 0.04123491, y: 0.04123491, z: 0.04123491} + - {x: 0.034816943, y: 0.034816943, z: 0.034816943} + - {x: 0.028591469, y: 0.028591469, z: 0.028591469} + - {x: 0.023058182, y: 0.023058182, z: 0.023058182} + - {x: 0.02, y: 0.02, z: 0.02} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {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, 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: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a000000 + triangles: + distanceConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e000000 + m_ConstraintCount: 63 + m_ActiveConstraintCount: 13 + m_InitialActiveConstraintCount: 13 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f0000001000000011000000120000001300000014000000150000001600000017000000180000001900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.1524441 + - 0.15289813 + - 0.1531161 + - 0.16036844 + - 0.15956938 + - 0.16026509 + - 0.15964794 + - 0.16015792 + - 0.16003728 + - 0.15990973 + - 0.1597457 + - 0.1603353 + - 0.16021276 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e000000 + m_ConstraintCount: 63 + m_ActiveConstraintCount: 13 + m_InitialActiveConstraintCount: 13 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.15290284 + - 0.15299127 + - 0.15290153 + - 0.15998638 + - 0.15977395 + - 0.15994787 + - 0.15938759 + - 0.16017342 + - 0.15995121 + - 0.15987158 + - 0.15932155 + - 0.16002035 + - 0.15843129 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + m_AlignBytes: 16 + bendConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000210000002200000023000000240000002500000026000000270000002800000029000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000210000002200000023000000240000002500000026000000270000002800000029000000 + m_ConstraintCount: 42 + m_ActiveConstraintCount: 9 + m_InitialActiveConstraintCount: 9 + particleIndices: + serializedContents: 000000000200000001000000030000000500000004000000060000000800000007000000090000000b0000000a0000000c0000000e0000000d0000000f0000001100000010000000120000001400000013000000150000001700000016000000180000001a000000190000001b0000001d0000001c0000001e000000200000001f0000002100000023000000220000002400000026000000250000002700000029000000280000002a0000002c0000002b0000002d0000002f0000002e000000300000003200000031000000330000003500000034000000360000003800000037000000390000003b0000003a0000003c0000003e0000003d0000003f0000004100000040000000420000004400000043000000450000004700000046000000480000004a000000490000004b0000004d0000004c0000004e000000500000004f0000005100000053000000520000005400000056000000550000005700000059000000580000005a0000005c0000005b0000005d0000005f0000005e000000600000006200000061000000630000006500000064000000660000006800000067000000690000006b0000006a0000006c0000006e0000006d0000006f0000007100000070000000720000007400000073000000750000007700000076000000780000007a000000790000007b0000007d0000007c000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.00015291572 + - 0.000041604042 + - 0.00012731552 + - 0.00016367435 + - 0.00008678436 + - 0.00004529953 + - 0.000012636185 + - 0.00033783913 + - 0.00059366226 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000210000002200000023000000240000002500000026000000270000002800000029000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000210000002200000023000000240000002500000026000000270000002800000029000000 + m_ConstraintCount: 42 + m_ActiveConstraintCount: 8 + m_InitialActiveConstraintCount: 8 + particleIndices: + serializedContents: 0100000003000000020000000400000006000000050000000700000009000000080000000a0000000c0000000b0000000d0000000f0000000e000000100000001200000011000000130000001500000014000000160000001800000017000000190000001b0000001a0000001c0000001e0000001d0000001f0000002100000020000000220000002400000023000000250000002700000026000000280000002a000000290000002b0000002d0000002c0000002e000000300000002f0000003100000033000000320000003400000036000000350000003700000039000000380000003a0000003c0000003b0000003d0000003f0000003e000000400000004200000041000000430000004500000044000000460000004800000047000000490000004b0000004a0000004c0000004e0000004d0000004f0000005100000050000000520000005400000053000000550000005700000056000000580000005a000000590000005b0000005d0000005c0000005e000000600000005f0000006100000063000000620000006400000066000000650000006700000069000000680000006a0000006c0000006b0000006d0000006f0000006e000000700000007200000071000000730000007500000074000000760000007800000077000000790000007b0000007a0000007c0000007e0000007d000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.0000015497208 + - 0.00007158518 + - 0.00013899803 + - 0.00010573864 + - 0.0002567768 + - 0.000028848648 + - 0.00004220009 + - 0.00010514259 + - 1.4217906 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000 + m_ConstraintCount: 41 + m_ActiveConstraintCount: 8 + m_InitialActiveConstraintCount: 8 + particleIndices: + serializedContents: 020000000400000003000000050000000700000006000000080000000a000000090000000b0000000d0000000c0000000e000000100000000f0000001100000013000000120000001400000016000000150000001700000019000000180000001a0000001c0000001b0000001d0000001f0000001e000000200000002200000021000000230000002500000024000000260000002800000027000000290000002b0000002a0000002c0000002e0000002d0000002f0000003100000030000000320000003400000033000000350000003700000036000000380000003a000000390000003b0000003d0000003c0000003e000000400000003f0000004100000043000000420000004400000046000000450000004700000049000000480000004a0000004c0000004b0000004d0000004f0000004e000000500000005200000051000000530000005500000054000000560000005800000057000000590000005b0000005a0000005c0000005e0000005d0000005f0000006100000060000000620000006400000063000000650000006700000066000000680000006a000000690000006b0000006d0000006c0000006e000000700000006f0000007100000073000000720000007400000076000000750000007700000079000000780000007a0000007c0000007b000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.00003105402 + - 0.0024890304 + - 0.00006830692 + - 0.000100016594 + - 0.0000052452087 + - 0.000013828278 + - 0.00014138222 + - 0.0000641346 + - 1.3689803 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + skinConstraintsData: + batches: [] + tetherConstraintsData: + batches: [] + stretchShearConstraintsData: + batches: [] + bendTwistConstraintsData: + batches: [] + shapeMatchingConstraintsData: + batches: [] + aerodynamicConstraintsData: + 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: + batches: [] + groups: + - {fileID: 5564886758469151143} + - {fileID: -8947839251049029312} + - {fileID: 5931347614357645318} + path: + m_Names: + - control point + - control point + - control point + m_Points: + data: + - tangentMode: 0 + inTangent: {x: -0.25, y: -0, z: -0} + position: {x: -0.007427931, y: 0, z: -0.00000009307402} + outTangent: {x: 0.051305592, y: 0, z: 0} + - tangentMode: 0 + inTangent: {x: -0.5638561, y: -0, z: 0.00000003808075} + position: {x: 0.90982604, y: 0, z: -0.00000014108508} + outTangent: {x: 1.6001339, y: 0, z: -0.0000001080671} + - tangentMode: 0 + inTangent: {x: -0.34506822, y: 0, z: -0.000000041135337} + position: {x: 4.1069407, y: 0, z: -0.00000023759115} + outTangent: {x: 0.25, y: 0, z: 0.000000029802322} + 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 + - 0.19999999 + m_Masses: + data: + - 0.1 + - 0.1 + - 0.05 + m_RotationalMasses: + data: + - 1 + - 1 + - 1 + m_Filters: + data: 0100ffff0100ffff0100ffff + m_Closed: 0 + m_ArcLengthTable: + - 0 + - 0.009036588 + - 0.02149235 + - 0.037374403 + - 0.05668985 + - 0.07944581 + - 0.1056494 + - 0.13530771 + - 0.16842788 + - 0.205017 + - 0.2450822 + - 0.2886306 + - 0.33566928 + - 0.38620535 + - 0.44024593 + - 0.49779814 + - 0.5588691 + - 0.62346596 + - 0.69159573 + - 0.7632656 + - 0.8384827 + - 0.91725403 + - 1.1434155 + - 1.3644772 + - 1.5800774 + - 1.7898542 + - 1.9934455 + - 2.1904895 + - 2.3806243 + - 2.563488 + - 2.7387185 + - 2.9059541 + - 3.064833 + - 3.2149928 + - 3.356072 + - 3.4877086 + - 3.6095405 + - 3.721206 + - 3.8223429 + - 3.9125896 + - 3.991584 + - 4.0589643 + - 4.1143684 + m_TotalSplineLenght: 4.1143684 + 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.6 + m_InterParticleDistance: 0.15824494 + totalParticles: 127 + m_RestLength: 19.938877 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a000000 + restLengths: + - 0.1524441 + - 0.15290284 + - 0.15289813 + - 0.15299127 + - 0.1531161 + - 0.15290153 + - 0.16036844 + - 0.15998638 + - 0.15956938 + - 0.15977395 + - 0.16026509 + - 0.15994787 + - 0.15964794 + - 0.15938759 + - 0.16015792 + - 0.16017342 + - 0.16003728 + - 0.15995121 + - 0.15990973 + - 0.15987158 + - 0.1597457 + - 0.15932155 + - 0.1603353 + - 0.16002035 + - 0.16021276 + - 0.15843129 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0.15824494 + - 0 + pooledParticles: 100 +--- !u!114 &5564886758469151143 +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: control point + m_EditorClassIdentifier: + particleIndices: 00000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &5931347614357645318 +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: control point + m_EditorClassIdentifier: + particleIndices: 1a000000 + m_Blueprint: {fileID: 11400000} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Snake.asset.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Snake.asset.meta new file mode 100644 index 00000000..65790f37 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Snake.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7cc7ef3c151f24a00a1fe338fa5f827c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/SpringRod.asset b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/SpringRod.asset new file mode 100644 index 00000000..b96633c7 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/SpringRod.asset @@ -0,0 +1,2751 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-9197235927271766280 +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: control point 26 + m_EditorClassIdentifier: + particleIndices: 34000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-8554650794309318006 +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: control point 2 + m_EditorClassIdentifier: + particleIndices: 04000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-7062799629812138241 +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: control point 27 + m_EditorClassIdentifier: + particleIndices: 36000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-6204515467363661297 +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: control point 4 + m_EditorClassIdentifier: + particleIndices: 08000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-6026587834117108368 +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: control point 19 + m_EditorClassIdentifier: + particleIndices: 26000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-5613563568972366451 +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: control point 21 + m_EditorClassIdentifier: + particleIndices: 2a000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-5362231322136858359 +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: control point 5 + m_EditorClassIdentifier: + particleIndices: 0a000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-4518859148014644581 +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: control point 0 + m_EditorClassIdentifier: + particleIndices: 00000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-4472545565918442984 +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: control point 22 + m_EditorClassIdentifier: + particleIndices: 2c000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-3913033247851424548 +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: control point 23 + m_EditorClassIdentifier: + particleIndices: 2e000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-3754279318447912116 +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: control point 17 + m_EditorClassIdentifier: + particleIndices: 22000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-3654237331907579593 +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: control point 20 + m_EditorClassIdentifier: + particleIndices: 28000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-1479811571211922058 +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: control point 10 + m_EditorClassIdentifier: + particleIndices: 14000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-332992812917679042 +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: control point 9 + m_EditorClassIdentifier: + particleIndices: 12000000 + 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: e028b099aa5d14e399bc3d87df5b7737, type: 3} + m_Name: SpringRod + m_EditorClassIdentifier: + m_Checksum: 3530553094 + m_Empty: 0 + m_Edited: 0 + m_ActiveParticleCount: 59 + m_InitialActiveParticleCount: 59 + _bounds: + m_Center: {x: 0.0002913475, y: 1.4499997, z: 0.0011931062} + m_Extent: {x: 0.69970864, y: 1.4499997, z: 0.6985083} + positions: + - {x: 0.7, y: 0, z: 0} + - {x: 0.64423114, y: 0.049999993, z: 0.27237654} + - {x: 0.48769468, y: 0.1, z: 0.5021492} + - {x: 0.25344917, y: 0.15, z: 0.6519097} + - {x: -0.020439683, y: 0.2, z: 0.6997015} + - {x: -0.29107168, y: 0.25, z: 0.6360032} + - {x: -0.5161756, y: 0.3, z: 0.4728242} + - {x: -0.6590324, y: 0.35, z: 0.23430562} + - {x: -0.69880635, y: 0.4, z: -0.040861934} + - {x: -0.62723285, y: 0.45000002, z: -0.30951858} + - {x: -0.45755053, y: 0.5, z: -0.52976173} + - {x: -0.214962, y: 0.5500001, z: -0.665593} + - {x: 0.06124942, y: 0.6, z: -0.6973152} + - {x: 0.32770163, y: 0.65000004, z: -0.61792755} + - {x: 0.5428963, y: 0.70000005, z: -0.44188645} + - {x: 0.6715861, y: 0.7500001, z: -0.19543509} + - {x: 0.6952294, y: 0.8000001, z: 0.08158484} + - {x: 0.60809517, y: 0.8500001, z: 0.3456053} + - {x: 0.42584547, y: 0.9000001, z: 0.5555678} + - {x: 0.17574176, y: 0.9500001, z: 0.67700636} + - {x: -0.10185068, y: 1.0000001, z: 0.69255066} + - {x: -0.36321428, y: 1.0500002, z: 0.5977442} + - {x: -0.5677656, y: 1.1000001, z: 0.4094414} + - {x: -0.68184936, y: 1.1500001, z: 0.15589833} + - {x: -0.68928134, y: 1.2000002, z: -0.12202966} + - {x: -0.58688354, y: 1.2500002, z: -0.38051346} + - {x: -0.3926881, y: 1.3000002, z: -0.5794791} + - {x: -0.1359219, y: 1.3500001, z: -0.68611073} + - {x: 0.14210458, y: 1.4000002, z: -0.68542415} + - {x: 0.39748773, y: 1.4500002, z: -0.5755226} + - {x: 0.5906982, y: 1.5000001, z: -0.37560037} + - {x: 0.6897872, y: 1.5500003, z: -0.11582906} + - {x: 0.6809825, y: 1.6000003, z: 0.1620583} + - {x: 0.5636703, y: 1.6500003, z: 0.41412386} + - {x: 0.3581914, y: 1.7000003, z: 0.6014141} + - {x: 0.095638454, y: 1.7500002, z: 0.6928752} + - {x: -0.18187381, y: 1.8000003, z: 0.67595994} + - {x: -0.43040556, y: 1.8500001, z: 0.5513382} + - {x: -0.6116168, y: 1.9000003, z: 0.34047744} + - {x: -0.69537246, y: 1.9500003, z: 0.07536612} + - {x: -0.6703613, y: 2.0000002, z: -0.2015336} + - {x: -0.53853536, y: 2.0500002, z: -0.44632116} + - {x: -0.3224743, y: 2.1000001, z: -0.6212973} + - {x: -0.055030525, y: 2.15, z: -0.69727653} + - {x: 0.22102086, y: 2.2, z: -0.66419107} + - {x: 0.461855, y: 2.25, z: -0.52527404} + - {x: 0.630448, y: 2.3, z: -0.30419618} + - {x: 0.698586, y: 2.3500001, z: -0.034646925} + - {x: 0.6574545, y: 2.3999999, z: 0.24031968} + - {x: 0.51156557, y: 2.4499996, z: 0.47699428} + - {x: 0.28565866, y: 2.4999998, z: 0.63906115} + - {x: 0.014235901, y: 2.5499997, z: 0.6992998} + - {x: -0.25941357, y: 2.5999997, z: 0.65015733} + - {x: -0.49172837, y: 2.6499996, z: 0.49741945} + - {x: -0.64712936, y: 2.6999996, z: 0.26687756} + - {x: -0.6994173, y: 2.7499995, z: -0.0061883293} + - {x: -0.6423058, y: 2.7999995, z: -0.27828628} + - {x: -0.48284987, y: 2.8499994, z: -0.50604236} + - {x: -0.24786891, y: 2.8999994, z: -0.6546457} + restPositions: + - {x: 0.7, y: 0, z: 0, w: 1} + - {x: 0.64423114, y: 0.049999993, z: 0.27237654, w: 1} + - {x: 0.48769468, y: 0.1, z: 0.5021492, w: 1} + - {x: 0.25344917, y: 0.15, z: 0.6519097, w: 1} + - {x: -0.020439683, y: 0.2, z: 0.6997015, w: 1} + - {x: -0.29107168, y: 0.25, z: 0.6360032, w: 1} + - {x: -0.5161756, y: 0.3, z: 0.4728242, w: 1} + - {x: -0.6590324, y: 0.35, z: 0.23430562, w: 1} + - {x: -0.69880635, y: 0.4, z: -0.040861934, w: 1} + - {x: -0.62723285, y: 0.45000002, z: -0.30951858, w: 1} + - {x: -0.45755053, y: 0.5, z: -0.52976173, w: 1} + - {x: -0.214962, y: 0.5500001, z: -0.665593, w: 1} + - {x: 0.06124942, y: 0.6, z: -0.6973152, w: 1} + - {x: 0.32770163, y: 0.65000004, z: -0.61792755, w: 1} + - {x: 0.5428963, y: 0.70000005, z: -0.44188645, w: 1} + - {x: 0.6715861, y: 0.7500001, z: -0.19543509, w: 1} + - {x: 0.6952294, y: 0.8000001, z: 0.08158484, w: 1} + - {x: 0.60809517, y: 0.8500001, z: 0.3456053, w: 1} + - {x: 0.42584547, y: 0.9000001, z: 0.5555678, w: 1} + - {x: 0.17574176, y: 0.9500001, z: 0.67700636, w: 1} + - {x: -0.10185068, y: 1.0000001, z: 0.69255066, w: 1} + - {x: -0.36321428, y: 1.0500002, z: 0.5977442, w: 1} + - {x: -0.5677656, y: 1.1000001, z: 0.4094414, w: 1} + - {x: -0.68184936, y: 1.1500001, z: 0.15589833, w: 1} + - {x: -0.68928134, y: 1.2000002, z: -0.12202966, w: 1} + - {x: -0.58688354, y: 1.2500002, z: -0.38051346, w: 1} + - {x: -0.3926881, y: 1.3000002, z: -0.5794791, w: 1} + - {x: -0.1359219, y: 1.3500001, z: -0.68611073, w: 1} + - {x: 0.14210458, y: 1.4000002, z: -0.68542415, w: 1} + - {x: 0.39748773, y: 1.4500002, z: -0.5755226, w: 1} + - {x: 0.5906982, y: 1.5000001, z: -0.37560037, w: 1} + - {x: 0.6897872, y: 1.5500003, z: -0.11582906, w: 1} + - {x: 0.6809825, y: 1.6000003, z: 0.1620583, w: 1} + - {x: 0.5636703, y: 1.6500003, z: 0.41412386, w: 1} + - {x: 0.3581914, y: 1.7000003, z: 0.6014141, w: 1} + - {x: 0.095638454, y: 1.7500002, z: 0.6928752, w: 1} + - {x: -0.18187381, y: 1.8000003, z: 0.67595994, w: 1} + - {x: -0.43040556, y: 1.8500001, z: 0.5513382, w: 1} + - {x: -0.6116168, y: 1.9000003, z: 0.34047744, w: 1} + - {x: -0.69537246, y: 1.9500003, z: 0.07536612, w: 1} + - {x: -0.6703613, y: 2.0000002, z: -0.2015336, w: 1} + - {x: -0.53853536, y: 2.0500002, z: -0.44632116, w: 1} + - {x: -0.3224743, y: 2.1000001, z: -0.6212973, w: 1} + - {x: -0.055030525, y: 2.15, z: -0.69727653, w: 1} + - {x: 0.22102086, y: 2.2, z: -0.66419107, w: 1} + - {x: 0.461855, y: 2.25, z: -0.52527404, w: 1} + - {x: 0.630448, y: 2.3, z: -0.30419618, w: 1} + - {x: 0.698586, y: 2.3500001, z: -0.034646925, w: 1} + - {x: 0.6574545, y: 2.3999999, z: 0.24031968, w: 1} + - {x: 0.51156557, y: 2.4499996, z: 0.47699428, w: 1} + - {x: 0.28565866, y: 2.4999998, z: 0.63906115, w: 1} + - {x: 0.014235901, y: 2.5499997, z: 0.6992998, w: 1} + - {x: -0.25941357, y: 2.5999997, z: 0.65015733, w: 1} + - {x: -0.49172837, y: 2.6499996, z: 0.49741945, w: 1} + - {x: -0.64712936, y: 2.6999996, z: 0.26687756, w: 1} + - {x: -0.6994173, y: 2.7499995, z: -0.0061883293, w: 1} + - {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} + 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} + - {x: -0.07793229, y: -0.4783847, z: -0.042673703, w: 0.8736439} + - {x: -0.06801292, y: -0.6409238, z: -0.057172783, w: 0.7624449} + - {x: -0.055162463, y: -0.7808345, z: -0.069653355, w: 0.6183875} + - {x: 0.040379923, y: 0.88723993, z: 0.0791451, w: -0.45267078} + - {x: 0.023683697, y: 0.9600076, z: 0.08563621, w: -0.26550132} + - {x: 0.0063718134, y: 0.99348044, z: 0.08862219, w: -0.07142987} + - {x: -0.011534199, y: 0.9876166, z: 0.0880991, w: 0.12930173} + - {x: -0.028642258, y: 0.94287217, z: 0.0841077, w: 0.32108822} + - {x: -0.04493112, y: 0.85930264, z: 0.076653026, w: 0.5036909} + - {x: -0.059134346, y: 0.7434051, z: 0.06631449, w: 0.66291356} + - {x: -0.07123438, y: 0.59532374, z: 0.053105097, w: 0.79855824} + - {x: -0.08029044, y: 0.42657065, z: 0.038051687, w: 0.9000794} + - {x: -0.08629132, y: 0.23735599, z: 0.021173041, w: 0.96735084} + - {x: -0.08877041, y: 0.042390052, z: 0.0037813496, w: 0.9951425} + - {x: -0.08772473, y: -0.15808488, z: -0.01410176, w: 0.9834199} + - {x: -0.083235495, y: -0.348483, z: -0.031085985, w: 0.9330944} + - {x: -0.07530833, y: -0.52856755, z: -0.04715019, w: 0.84422857} + - {x: -0.064559504, y: -0.6843382, z: -0.06104552, w: 0.7237311} + - {x: -0.051002473, y: -0.8156011, z: -0.07275475, w: 0.57175195} + - {x: 0.03569096, y: 0.91215146, z: 0.08136722, w: -0.4001066} + - {x: 0.018644303, y: 0.97386914, z: 0.08687265, w: -0.20900835} + - {x: 0.0011876499, y: 0.99595594, z: 0.088843085, w: -0.01331389} + - {x: -0.016657317, y: 0.9783845, z: 0.08727566, w: 0.18673319} + - {x: -0.03350316, y: 0.9225208, z: 0.0822922, w: 0.37558073} + - {x: -0.04932904, y: 0.8284344, z: 0.07389935, w: 0.55299366} + - {x: -0.06290469, y: 0.70344, z: 0.06274954, w: 0.7051792} + - {x: -0.074212946, y: 0.5476929, z: 0.048856277, w: 0.83194834} + - {x: -0.08237469, y: 0.37330157, z: 0.033299856, w: 0.92344546} + - {x: -0.08738011, y: 0.18048231, z: 0.016099693, w: 0.97955686} + - {x: -0.08883985, y: -0.015773688, z: -0.0014070726, w: 0.99592006} + - {x: -0.086752035, y: -0.21522236, z: -0.019198658, w: 0.9725147} + - {x: -0.08127883, y: -0.40235803, z: -0.035891794, w: 0.9111606} + - {x: -0.072427444, y: -0.57694805, z: -0.051465854, w: 0.8119338} + - {x: -0.06088597, y: -0.72541904, z: -0.06471016, w: 0.6825487} + - {x: -0.04666843, y: -0.84758604, z: -0.07560785, w: 0.5231667} + - {x: 0.030880354, y: 0.93395203, z: 0.08331199, w: -0.34617788} + - {x: 0.013541363, y: 0.9844092, z: 0.08781297, w: -0.15180269} + - {x: -0.004000551, y: 0.9950348, z: 0.08876081, w: 0.044847354} + - {x: -0.021723531, y: 0.9658158, z: 0.086154364, w: 0.24352719} + - {x: -0.0382498, y: 0.89902353, z: 0.08019623, w: 0.4287916} + - {x: -0.053558752, y: 0.7947415, z: 0.070893906, w: 0.6004094} + - {x: -0.066460274, y: 0.6610764, z: 0.058970477, w: 0.7450393} + - {x: -0.07693825, y: 0.49819526, z: 0.04444087, w: 0.8625004} + - {x: -0.08417814, y: 0.31876016, z: 0.028434595, w: 0.94366175} + - {x: -0.08817102, y: 0.12299469, z: 0.010971596, w: 0.9884219} + - {x: -0.08860607, y: -0.073881574, z: -0.006590505, w: 0.9933011} + - {x: -0.08548327, y: -0.2716228, z: -0.024229743, w: 0.9582936} + - {x: -0.07904533, y: -0.45485812, z: -0.040575076, w: 0.88612056} + - {x: -0.06929987, y: -0.62335837, z: -0.055605892, w: 0.77687186} + - {x: -0.057004824, y: -0.7640237, z: -0.06815376, w: 0.639041} + - {x: 0.04217549, y: 0.876679, z: 0.07820303, w: -0.47279966} + - {x: 0.025964634, y: 0.95256656, z: 0.08497247, w: -0.2910712} + - {x: 0.008392524, y: 0.99159163, z: 0.08845367, w: -0.09408265} + - {x: -0.009174796, y: 0.99072045, z: 0.088375956, w: 0.10285215} + - {x: -0.026715415, y: 0.94995403, z: 0.08473943, w: 0.29948768} + - {x: -0.042865735, y: 0.8724616, z: 0.07782682, w: 0.48053747} + - {x: -0.042865735, y: 0.8724616, z: 0.07782682, w: 0.48053747} + restOrientations: + - {x: -0.088398315, y: -0.10040869, z: -0.008956829, w: 0.990971} + - {x: -0.08490821, y: -0.2934198, z: -0.026174147, w: 0.95184577} + - {x: -0.07793229, y: -0.4783847, z: -0.042673703, w: 0.8736439} + - {x: -0.06801292, y: -0.6409238, z: -0.057172783, w: 0.7624449} + - {x: -0.055162463, y: -0.7808345, z: -0.069653355, w: 0.6183875} + - {x: 0.040379923, y: 0.88723993, z: 0.0791451, w: -0.45267078} + - {x: 0.023683697, y: 0.9600076, z: 0.08563621, w: -0.26550132} + - {x: 0.0063718134, y: 0.99348044, z: 0.08862219, w: -0.07142987} + - {x: -0.011534199, y: 0.9876166, z: 0.0880991, w: 0.12930173} + - {x: -0.028642258, y: 0.94287217, z: 0.0841077, w: 0.32108822} + - {x: -0.04493112, y: 0.85930264, z: 0.076653026, w: 0.5036909} + - {x: -0.059134346, y: 0.7434051, z: 0.06631449, w: 0.66291356} + - {x: -0.07123438, y: 0.59532374, z: 0.053105097, w: 0.79855824} + - {x: -0.08029044, y: 0.42657065, z: 0.038051687, w: 0.9000794} + - {x: -0.08629132, y: 0.23735599, z: 0.021173041, w: 0.96735084} + - {x: -0.08877041, y: 0.042390052, z: 0.0037813496, w: 0.9951425} + - {x: -0.08772473, y: -0.15808488, z: -0.01410176, w: 0.9834199} + - {x: -0.083235495, y: -0.348483, z: -0.031085985, w: 0.9330944} + - {x: -0.07530833, y: -0.52856755, z: -0.04715019, w: 0.84422857} + - {x: -0.064559504, y: -0.6843382, z: -0.06104552, w: 0.7237311} + - {x: -0.051002473, y: -0.8156011, z: -0.07275475, w: 0.57175195} + - {x: 0.03569096, y: 0.91215146, z: 0.08136722, w: -0.4001066} + - {x: 0.018644303, y: 0.97386914, z: 0.08687265, w: -0.20900835} + - {x: 0.0011876499, y: 0.99595594, z: 0.088843085, w: -0.01331389} + - {x: -0.016657317, y: 0.9783845, z: 0.08727566, w: 0.18673319} + - {x: -0.03350316, y: 0.9225208, z: 0.0822922, w: 0.37558073} + - {x: -0.04932904, y: 0.8284344, z: 0.07389935, w: 0.55299366} + - {x: -0.06290469, y: 0.70344, z: 0.06274954, w: 0.7051792} + - {x: -0.074212946, y: 0.5476929, z: 0.048856277, w: 0.83194834} + - {x: -0.08237469, y: 0.37330157, z: 0.033299856, w: 0.92344546} + - {x: -0.08738011, y: 0.18048231, z: 0.016099693, w: 0.97955686} + - {x: -0.08883985, y: -0.015773688, z: -0.0014070726, w: 0.99592006} + - {x: -0.086752035, y: -0.21522236, z: -0.019198658, w: 0.9725147} + - {x: -0.08127883, y: -0.40235803, z: -0.035891794, w: 0.9111606} + - {x: -0.072427444, y: -0.57694805, z: -0.051465854, w: 0.8119338} + - {x: -0.06088597, y: -0.72541904, z: -0.06471016, w: 0.6825487} + - {x: -0.04666843, y: -0.84758604, z: -0.07560785, w: 0.5231667} + - {x: 0.030880354, y: 0.93395203, z: 0.08331199, w: -0.34617788} + - {x: 0.013541363, y: 0.9844092, z: 0.08781297, w: -0.15180269} + - {x: -0.004000551, y: 0.9950348, z: 0.08876081, w: 0.044847354} + - {x: -0.021723531, y: 0.9658158, z: 0.086154364, w: 0.24352719} + - {x: -0.0382498, y: 0.89902353, z: 0.08019623, w: 0.4287916} + - {x: -0.053558752, y: 0.7947415, z: 0.070893906, w: 0.6004094} + - {x: -0.066460274, y: 0.6610764, z: 0.058970477, w: 0.7450393} + - {x: -0.07693825, y: 0.49819526, z: 0.04444087, w: 0.8625004} + - {x: -0.08417814, y: 0.31876016, z: 0.028434595, w: 0.94366175} + - {x: -0.08817102, y: 0.12299469, z: 0.010971596, w: 0.9884219} + - {x: -0.08860607, y: -0.073881574, z: -0.006590505, w: 0.9933011} + - {x: -0.08548327, y: -0.2716228, z: -0.024229743, w: 0.9582936} + - {x: -0.07904533, y: -0.45485812, z: -0.040575076, w: 0.88612056} + - {x: -0.06929987, y: -0.62335837, z: -0.055605892, w: 0.77687186} + - {x: -0.057004824, y: -0.7640237, z: -0.06815376, w: 0.639041} + - {x: 0.04217549, y: 0.876679, z: 0.07820303, w: -0.47279966} + - {x: 0.025964634, y: 0.95256656, z: 0.08497247, w: -0.2910712} + - {x: 0.008392524, y: 0.99159163, z: 0.08845367, w: -0.09408265} + - {x: -0.009174796, y: 0.99072045, z: 0.088375956, w: 0.10285215} + - {x: -0.026715415, y: 0.94995403, z: 0.08473943, w: 0.29948768} + - {x: -0.042865735, y: 0.8724616, z: 0.07782682, w: 0.48053747} + - {x: -0.042865735, y: 0.8724616, z: 0.07782682, w: 0.48053747} + 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} + angularVelocities: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + invMasses: + - 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 + invRotationalMasses: + - 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} + - {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.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} + 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, 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} + points: + edges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f00000020000000200000002100000021000000220000002200000023000000230000002400000024000000250000002500000026000000260000002700000027000000280000002800000029000000290000002a0000002a0000002b0000002b0000002c0000002c0000002d0000002d0000002e0000002e0000002f0000002f00000030000000300000003100000031000000320000003200000033000000330000003400000034000000350000003500000036000000360000003700000037000000380000003800000039000000390000003a000000 + triangles: + distanceConstraintsData: + batches: [] + bendConstraintsData: + batches: [] + skinConstraintsData: + batches: [] + tetherConstraintsData: + batches: [] + stretchShearConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c000000 + m_ConstraintCount: 29 + m_ActiveConstraintCount: 29 + m_InitialActiveConstraintCount: 29 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f00000030000000310000003200000033000000340000003500000036000000370000003800000039000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + orientationIndices: + serializedContents: 00000000020000000400000006000000080000000a0000000c0000000e00000010000000120000001400000016000000180000001a0000001c0000001e00000020000000220000002400000026000000280000002a0000002c0000002e0000003000000032000000340000003600000038000000 + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.28248742 + - 0.28248745 + - 0.28248742 + - 0.28248745 + - 0.28248745 + - 0.28248778 + - 0.28248748 + - 0.28248778 + - 0.2824875 + - 0.2824875 + - 0.2824875 + - 0.2824875 + - 0.2824875 + - 0.28248748 + - 0.28248698 + - 0.28248855 + - 0.28248754 + - 0.28248748 + - 0.28248644 + - 0.2824872 + - 0.2824872 + - 0.28248718 + - 0.28248718 + - 0.28248823 + - 0.28248614 + - 0.28248715 + - 0.2824872 + - 0.28248718 + - 0.2824872 + m_AlignBytes: 16 + restOrientations: + serializedContents: + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + m_AlignBytes: 16 + stiffnesses: + serializedContents: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c000000 + m_ConstraintCount: 29 + m_ActiveConstraintCount: 29 + m_InitialActiveConstraintCount: 29 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + orientationIndices: + serializedContents: 01000000030000000500000007000000090000000b0000000d0000000f00000011000000130000001500000017000000190000001b0000001d0000001f00000021000000230000002500000027000000290000002b0000002d0000002f0000003100000033000000350000003700000039000000 + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.28248742 + - 0.28248745 + - 0.28248748 + - 0.28248742 + - 0.28248742 + - 0.28248727 + - 0.28248754 + - 0.28248724 + - 0.2824875 + - 0.2824875 + - 0.28248748 + - 0.28248754 + - 0.2824875 + - 0.2824875 + - 0.28248748 + - 0.28248698 + - 0.2824875 + - 0.28248748 + - 0.28248855 + - 0.28248718 + - 0.2824872 + - 0.2824872 + - 0.28248718 + - 0.2824861 + - 0.28248826 + - 0.2824872 + - 0.2824872 + - 0.28248718 + - 0.28248715 + m_AlignBytes: 16 + restOrientations: + serializedContents: + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + - {x: 0, y: 0, z: 0, w: 1} + m_AlignBytes: 16 + stiffnesses: + serializedContents: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + m_AlignBytes: 16 + bendTwistConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c000000 + m_ConstraintCount: 29 + m_ActiveConstraintCount: 29 + m_InitialActiveConstraintCount: 29 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f00000030000000310000003200000033000000340000003500000036000000370000003800000039000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restDarbouxVectors: + serializedContents: + - {x: -0.000000014834069, y: -0.1936437, z: -0.034824595, w: 0.98045367} + - {x: 0.000000012330821, y: -0.19364393, z: -0.03482462, w: 0.98045367} + - {x: 0.0000000056083014, y: -0.1936439, z: -0.03482461, w: 0.98045367} + - {x: -0.00000007479838, y: -0.19364391, z: -0.034824625, w: 0.98045367} + - {x: 0.000000033511224, y: -0.19364382, z: -0.034824606, w: 0.98045367} + - {x: 0.000000053525877, y: -0.19364375, z: -0.034824602, w: 0.98045367} + - {x: 0.000000016324421, y: -0.1936439, z: -0.034824625, w: 0.98045367} + - {x: 0.000000029968685, y: -0.19364375, z: -0.0348246, w: 0.98045367} + - {x: 0.000000010965417, y: -0.19364375, z: -0.034824606, w: 0.98045367} + - {x: -7.3775563e-10, y: -0.19364385, z: -0.03482462, w: 0.9804536} + - {x: 0.00000020749569, y: -0.19364373, z: -0.034824602, w: 0.98045367} + - {x: -0.00000020532734, y: -0.19364388, z: -0.03482462, w: 0.98045367} + - {x: 0.00000021831734, y: -0.19364387, z: -0.03482462, w: 0.9804536} + - {x: -0.00000020306328, y: -0.19364361, z: -0.03482458, w: 0.9804537} + - {x: 0.00000015028971, y: -0.19364366, z: -0.034824573, w: 0.9804537} + - {x: -0.00000007968951, y: -0.19364394, z: -0.034824643, w: 0.9804536} + - {x: 0.00000019577718, y: -0.19364372, z: -0.03482459, w: 0.98045367} + - {x: -0.00000021081502, y: -0.19364387, z: -0.034824625, w: 0.98045367} + - {x: 0.000000031106165, y: -0.19364384, z: -0.034824613, w: 0.9804536} + - {x: 0.0000000027044509, y: -0.19364387, z: -0.034824617, w: 0.98045367} + - {x: 0.000000015801294, y: -0.1936438, z: -0.034824602, w: 0.9804537} + - {x: 0.0000000053575264, y: -0.19364391, z: -0.03482463, w: 0.9804536} + - {x: -0.0000000030868992, y: -0.1936438, z: -0.034824602, w: 0.9804536} + - {x: 0.00000019046385, y: -0.19364369, z: -0.034824587, w: 0.9804537} + - {x: -0.00000017771922, y: -0.19364384, z: -0.034824606, w: 0.98045367} + - {x: 0.000000017428233, y: -0.19364373, z: -0.034824602, w: 0.9804537} + - {x: 0.000000010886433, y: -0.19364388, z: -0.034824617, w: 0.98045367} + - {x: 0.0000000043257606, y: -0.1936437, z: -0.03482459, w: 0.98045367} + - {x: -0.0000000017342039, y: -0.19364376, z: -0.034824602, w: 0.98045367} + m_AlignBytes: 16 + stiffnesses: + serializedContents: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c000000 + m_ConstraintCount: 29 + m_ActiveConstraintCount: 29 + m_InitialActiveConstraintCount: 29 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restDarbouxVectors: + serializedContents: + - {x: 0.000000018055042, y: -0.1974205, z: -0.035503812, w: 0.9796758} + - {x: -0.0000000083661424, y: -0.19742048, z: -0.035503812, w: 0.9796759} + - {x: 0.00000003859163, y: -0.1974205, z: -0.035503794, w: 0.9796758} + - {x: 0.000000013113583, y: -0.19742052, z: -0.03550382, w: 0.9796758} + - {x: -0.00000004809052, y: -0.19742063, z: -0.035503834, w: 0.97967577} + - {x: -0.000000030546445, y: -0.19742055, z: -0.035503816, w: 0.9796758} + - {x: -0.000000023244386, y: -0.1974207, z: -0.035503842, w: 0.9796757} + - {x: -0.000000019885793, y: -0.19742067, z: -0.03550383, w: 0.97967577} + - {x: 0.0000000054785922, y: -0.19742058, z: -0.035503812, w: 0.97967577} + - {x: -0.00000011335668, y: -0.19742064, z: -0.035503842, w: 0.9796757} + - {x: 0.000000005609637, y: -0.19742067, z: -0.03550379, w: 0.9796758} + - {x: -0.000000017120326, y: -0.1974206, z: -0.035503864, w: 0.97967577} + - {x: -0.0000000018460848, y: -0.19742063, z: -0.035503786, w: 0.97967577} + - {x: 0.000000046562505, y: -0.19742057, z: -0.03550385, w: 0.9796758} + - {x: -0.00000007847696, y: -0.197421, z: -0.03550387, w: 0.9796757} + - {x: -0.000000031569282, y: -0.19742058, z: -0.035503853, w: 0.97967577} + - {x: -6.023808e-10, y: -0.1974207, z: -0.035503797, w: 0.97967577} + - {x: 0.00000009220447, y: -0.19742012, z: -0.035503767, w: 0.9796759} + - {x: -0.0000000087599785, y: -0.19742072, z: -0.035503846, w: 0.97967577} + - {x: -0.0000000021966253, y: -0.19742021, z: -0.03550375, w: 0.9796759} + - {x: -0.000000019038053, y: -0.19742015, z: -0.03550373, w: 0.9796759} + - {x: -0.0000000017551981, y: -0.19742014, z: -0.035503738, w: 0.9796759} + - {x: -0.000000101955976, y: -0.1974206, z: -0.035503846, w: 0.9796758} + - {x: 0.0000000049064712, y: -0.19741946, z: -0.03550358, w: 0.97967607} + - {x: 0.00000007741675, y: -0.19742066, z: -0.03550385, w: 0.97967577} + - {x: -0.0000000047656963, y: -0.19742015, z: -0.035503726, w: 0.97967595} + - {x: -0.000000020347304, y: -0.19742025, z: -0.03550376, w: 0.9796758} + - {x: 0.000000008088907, y: -0.19742022, z: -0.03550375, w: 0.9796759} + - {x: 0, y: 0, z: 0, w: 1} + m_AlignBytes: 16 + stiffnesses: + serializedContents: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 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} + m_AlignBytes: 16 + shapeMatchingConstraintsData: + batches: [] + aerodynamicConstraintsData: + 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 + m_IDToIndex: 00000000 + m_ConstraintCount: 1 + m_ActiveConstraintCount: 1 + m_InitialActiveConstraintCount: 1 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + firstParticle: + serializedContents: 00000000 + m_AlignBytes: 16 + numParticles: + serializedContents: 3b000000 + m_AlignBytes: 16 + lengths: + serializedContents: + - {x: 0.28434873, y: 0.28434873} + m_AlignBytes: 16 + volumeConstraintsData: + batches: [] + groups: + - {fileID: -4518859148014644581} + - {fileID: 2371962795392660606} + - {fileID: -8554650794309318006} + - {fileID: 4748757721283841919} + - {fileID: -6204515467363661297} + - {fileID: -5362231322136858359} + - {fileID: 7744494324993175841} + - {fileID: 5743642769677576324} + - {fileID: 2090210430256682874} + - {fileID: -332992812917679042} + - {fileID: -1479811571211922058} + - {fileID: 8073728408466097637} + - {fileID: 3949240139764315219} + - {fileID: 3535050140158790076} + - {fileID: 8392284965903659261} + - {fileID: 8436558200313416828} + - {fileID: 7514755403420506347} + - {fileID: -3754279318447912116} + - {fileID: 8516833290342707563} + - {fileID: -6026587834117108368} + - {fileID: -3654237331907579593} + - {fileID: -5613563568972366451} + - {fileID: -4472545565918442984} + - {fileID: -3913033247851424548} + - {fileID: 1526367778732422361} + - {fileID: 6595340479447865845} + - {fileID: -9197235927271766280} + - {fileID: -7062799629812138241} + - {fileID: 237785562514482078} + - {fileID: 9190015862606898100} + path: + m_Names: + - control point 0 + - control point 1 + - control point 2 + - control point 3 + - control point 4 + - control point 5 + - control point 6 + - control point 7 + - control point 8 + - control point 9 + - control point 10 + - control point 11 + - control point 12 + - control point 13 + - control point 14 + - control point 15 + - control point 16 + - control point 17 + - control point 18 + - control point 19 + - control point 20 + - control point 21 + - control point 22 + - control point 23 + - control point 24 + - control point 25 + - control point 26 + - control point 27 + - control point 28 + - control point 29 + m_Points: + data: + - tangentMode: 0 + inTangent: {x: 0, y: -0.026756361, z: -0.18729453} + position: {x: 0.7, y: 0, z: 0} + outTangent: {x: -0, y: 0.026756361, z: 0.18729453} + - tangentMode: 0 + inTangent: {x: 0.13435684, y: -0.026756361, z: -0.13048933} + position: {x: 0.48769468, y: 0.1, z: 0.5021492} + outTangent: {x: -0.13435684, y: 0.026756361, z: 0.13048933} + - tangentMode: 0 + inTangent: {x: 0.18721464, y: -0.026756361, z: 0.0054689148} + position: {x: -0.020439683, y: 0.2, z: 0.6997015} + outTangent: {x: -0.18721464, y: 0.026756361, z: -0.0054689148} + - tangentMode: 0 + inTangent: {x: 0.12651055, y: -0.026756361, z: 0.13810982} + position: {x: -0.5161756, y: 0.3, z: 0.4728242} + outTangent: {x: -0.12651055, y: 0.026756361, z: -0.13810982} + - tangentMode: 0 + inTangent: {x: -0.010933166, y: -0.026756361, z: 0.18697514} + position: {x: -0.69880635, y: 0.4, z: -0.040861934} + outTangent: {x: 0.010933166, y: 0.026756361, z: -0.18697514} + - tangentMode: 0 + inTangent: {x: -0.14174496, y: -0.026756361, z: 0.122423865} + position: {x: -0.45755053, y: 0.5, z: -0.52976173} + outTangent: {x: 0.14174496, y: 0.026756361, z: -0.122423865} + - tangentMode: 0 + inTangent: {x: -0.18657617, y: -0.026756361, z: -0.016388116} + position: {x: 0.06124942, y: 0.6, z: -0.6973152} + outTangent: {x: 0.18657617, y: 0.026756361, z: 0.016388116} + - tangentMode: 0 + inTangent: {x: -0.11823272, y: -0.026756361, z: -0.14525929} + position: {x: 0.5428963, y: 0.70000005, z: -0.44188645} + outTangent: {x: 0.11823272, y: 0.026756361, z: 0.14525929} + - tangentMode: 0 + inTangent: {x: 0.021829134, y: -0.026756361, z: -0.18601808} + position: {x: 0.6952294, y: 0.8000001, z: 0.08158484} + outTangent: {x: -0.021829134, y: 0.026756361, z: 0.18601808} + - tangentMode: 0 + inTangent: {x: 0.14864974, y: -0.026756361, z: -0.11394075} + position: {x: 0.42584547, y: 0.9000001, z: 0.5555678} + outTangent: {x: -0.14864974, y: 0.026756361, z: 0.11394075} + - tangentMode: 0 + inTangent: {x: 0.18530135, y: -0.026756361, z: 0.027251536} + position: {x: -0.10185068, y: 1.0000001, z: 0.69255066} + outTangent: {x: -0.18530135, y: 0.026756361, z: -0.027251536} + - tangentMode: 0 + inTangent: {x: 0.1095516, y: -0.026756357, z: 0.15191339} + position: {x: -0.5677656, y: 1.1000001, z: 0.4094414} + outTangent: {x: -0.1095516, y: 0.026756357, z: -0.15191339} + - tangentMode: 0 + inTangent: {x: -0.032650698, y: -0.026756361, z: 0.18442662} + position: {x: -0.68928134, y: 1.2000002, z: -0.12202966} + outTangent: {x: 0.032650698, y: 0.026756361, z: -0.18442662} + - tangentMode: 0 + inTangent: {x: -0.15504752, y: -0.026756361, z: 0.10506904} + position: {x: -0.3926881, y: 1.3000002, z: -0.5794791} + outTangent: {x: 0.15504752, y: 0.026756361, z: -0.10506904} + - tangentMode: 0 + inTangent: {x: -0.18339457, y: -0.026756361, z: -0.03802201} + position: {x: 0.14210458, y: 1.4000002, z: -0.68542415} + outTangent: {x: 0.18339457, y: 0.026756361, z: 0.03802201} + - tangentMode: 0 + inTangent: {x: -0.10049687, y: -0.026756361, z: -0.1580494} + position: {x: 0.5906985, y: 1.5000002, z: -0.37559992} + outTangent: {x: 0.10049687, y: 0.026756361, z: 0.1580494} + - tangentMode: 0 + inTangent: {x: 0.043360904, y: -0.026756361, z: -0.18220612} + position: {x: 0.6809825, y: 1.6000003, z: 0.1620583} + outTangent: {x: -0.043360904, y: 0.026756361, z: 0.18220612} + - tangentMode: 0 + inTangent: {x: 0.1609165, y: -0.026756361, z: -0.09583897} + position: {x: 0.3581914, y: 1.7000003, z: 0.6014141} + outTangent: {x: -0.1609165, y: 0.026756361, z: 0.09583897} + - tangentMode: 0 + inTangent: {x: 0.18086228, y: -0.026756365, z: 0.04866282} + position: {x: -0.18187381, y: 1.8000003, z: 0.67595994} + outTangent: {x: -0.18086228, y: 0.026756365, z: -0.04866282} + - tangentMode: 0 + inTangent: {x: 0.09109937, y: -0.026756361, z: 0.16364639} + position: {x: -0.6116168, y: 1.9000003, z: 0.34047744} + outTangent: {x: -0.09109937, y: 0.026756361, z: -0.16364639} + - tangentMode: 0 + inTangent: {x: -0.05392305, y: -0.026756357, z: 0.17936425} + position: {x: -0.6703613, y: 2.0000002, z: -0.2015336} + outTangent: {x: 0.05392305, y: 0.026756357, z: -0.17936425} + - tangentMode: 0 + inTangent: {x: -0.16623655, y: -0.026756361, z: 0.08628239} + position: {x: -0.3224743, y: 2.1000001, z: -0.6212973} + outTangent: {x: 0.16623655, y: 0.026756361, z: -0.08628239} + - tangentMode: 0 + inTangent: {x: -0.17771336, y: -0.026756361, z: -0.059137143} + position: {x: 0.22102086, y: 2.2, z: -0.66419107} + outTangent: {x: 0.17771336, y: 0.026756361, z: 0.059137143} + - tangentMode: 0 + inTangent: {x: -0.081391826, y: -0.026756361, z: -0.16868493} + position: {x: 0.630448, y: 2.3, z: -0.30419618} + outTangent: {x: 0.081391826, y: 0.026756361, z: 0.16868493} + - tangentMode: 0 + inTangent: {x: 0.064300805, y: -0.026756361, z: -0.1759109} + position: {x: 0.6574545, y: 2.3999999, z: 0.24031968} + outTangent: {x: -0.064300805, y: 0.026756361, z: 0.1759109} + - tangentMode: 0 + inTangent: {x: 0.17098948, y: -0.026756357, z: -0.076431856} + position: {x: 0.28565866, y: 2.4999998, z: 0.63906115} + outTangent: {x: -0.17098948, y: 0.026756357, z: 0.076431856} + - tangentMode: 0 + inTangent: {x: 0.17395844, y: -0.026756361, z: 0.069409624} + position: {x: -0.25941357, y: 2.5999997, z: 0.65015733} + outTangent: {x: -0.17395844, y: 0.026756361, z: -0.069409624} + - tangentMode: 0 + inTangent: {x: 0.071406715, y: -0.026756357, z: 0.17314824} + position: {x: -0.64712936, y: 2.6999996, z: 0.26687756} + outTangent: {x: -0.071406715, y: 0.026756357, z: -0.17314824} + - tangentMode: 0 + inTangent: {x: -0.07445928, y: -0.026756361, z: 0.17185766} + position: {x: -0.6423058, y: 2.7999995, z: -0.27828628} + outTangent: {x: 0.07445928, y: 0.026756361, z: -0.17185766} + - tangentMode: 0 + inTangent: {x: -0.17515934, y: -0.026756361, z: 0.066320695} + position: {x: -0.24786891, y: 2.8999994, z: -0.6546457} + outTangent: {x: 0.17515934, y: 0.026756361, z: -0.066320695} + 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} + - {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} + - {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} + - {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} + - {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} + - {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} + m_Thickness: + 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 + m_Masses: + 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 + m_RotationalMasses: + data: + - 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 + m_ArcLengthTable: + - 0 + - 0.027028512 + - 0.054062314 + - 0.08110634 + - 0.10816368 + - 0.1352358 + - 0.16232279 + - 0.18942355 + - 0.216536 + - 0.24365735 + - 0.27078426 + - 0.29791307 + - 0.32503998 + - 0.35216135 + - 0.3792738 + - 0.40637454 + - 0.43346152 + - 0.46053365 + - 0.48759097 + - 0.51463497 + - 0.5416688 + - 0.5686973 + - 0.5957258 + - 0.6227596 + - 0.6498036 + - 0.6768609 + - 0.70393306 + - 0.73102003 + - 0.7581208 + - 0.78523326 + - 0.8123546 + - 0.83948153 + - 0.86661035 + - 0.89373726 + - 0.9208586 + - 0.9479711 + - 0.97507185 + - 1.0021589 + - 1.029231 + - 1.0562882 + - 1.0833323 + - 1.1103661 + - 1.1373947 + - 1.1644232 + - 1.191457 + - 1.2185011 + - 1.2455584 + - 1.2726305 + - 1.2997174 + - 1.3268182 + - 1.3539307 + - 1.381052 + - 1.4081789 + - 1.4353077 + - 1.4624346 + - 1.489556 + - 1.5166684 + - 1.5437692 + - 1.5708562 + - 1.5979283 + - 1.6249856 + - 1.6520296 + - 1.6790634 + - 1.706092 + - 1.7331206 + - 1.7601544 + - 1.7871984 + - 1.8142557 + - 1.8413278 + - 1.8684148 + - 1.8955156 + - 1.922628 + - 1.9497494 + - 1.9768763 + - 2.004005 + - 2.0311317 + - 2.058253 + - 2.0853655 + - 2.1124663 + - 2.1395533 + - 2.1666255 + - 2.193683 + - 2.220727 + - 2.2477608 + - 2.2747893 + - 2.301818 + - 2.3288517 + - 2.3558958 + - 2.3829532 + - 2.4100254 + - 2.4371123 + - 2.4642131 + - 2.4913256 + - 2.518447 + - 2.5455737 + - 2.5727024 + - 2.5998292 + - 2.6269505 + - 2.654063 + - 2.6811638 + - 2.7082508 + - 2.735323 + - 2.7623804 + - 2.7894244 + - 2.8164582 + - 2.8434868 + - 2.8705153 + - 2.8975492 + - 2.9245932 + - 2.9516506 + - 2.9787228 + - 3.0058098 + - 3.0329106 + - 3.060023 + - 3.0871444 + - 3.1142714 + - 3.1414 + - 3.1685271 + - 3.1956484 + - 3.222761 + - 3.2498617 + - 3.2769487 + - 3.304021 + - 3.3310783 + - 3.3581223 + - 3.3851562 + - 3.4121847 + - 3.4392133 + - 3.466247 + - 3.4932911 + - 3.5203485 + - 3.5474207 + - 3.5745077 + - 3.6016085 + - 3.628721 + - 3.6558423 + - 3.6829693 + - 3.710098 + - 3.737225 + - 3.7643464 + - 3.7914588 + - 3.8185596 + - 3.8456466 + - 3.8727188 + - 3.8997762 + - 3.9268203 + - 3.953854 + - 3.9808826 + - 4.007911 + - 4.034945 + - 4.061989 + - 4.089046 + - 4.116118 + - 4.143205 + - 4.1703057 + - 4.197418 + - 4.2245398 + - 4.2516665 + - 4.2787952 + - 4.305922 + - 4.3330436 + - 4.360156 + - 4.3872566 + - 4.414344 + - 4.441416 + - 4.468473 + - 4.495517 + - 4.5225506 + - 4.549579 + - 4.5766077 + - 4.6036415 + - 4.6306853 + - 4.6577425 + - 4.6848145 + - 4.7119017 + - 4.739002 + - 4.7661147 + - 4.7932363 + - 4.820363 + - 4.8474917 + - 4.8746185 + - 4.90174 + - 4.9288526 + - 4.955953 + - 4.9830403 + - 5.0101123 + - 5.0371695 + - 5.0642133 + - 5.091247 + - 5.1182756 + - 5.145304 + - 5.172338 + - 5.199382 + - 5.226439 + - 5.253511 + - 5.280598 + - 5.3076987 + - 5.334811 + - 5.3619328 + - 5.3890595 + - 5.4161882 + - 5.443315 + - 5.4704366 + - 5.497549 + - 5.5246496 + - 5.551737 + - 5.578809 + - 5.605866 + - 5.63291 + - 5.6599436 + - 5.686972 + - 5.7140007 + - 5.7410345 + - 5.7680783 + - 5.7951355 + - 5.8222075 + - 5.8492947 + - 5.876395 + - 5.9035077 + - 5.9306293 + - 5.957756 + - 5.9848847 + - 6.0120115 + - 6.039133 + - 6.0662456 + - 6.093346 + - 6.1204333 + - 6.1475053 + - 6.1745625 + - 6.2016063 + - 6.22864 + - 6.2556686 + - 6.282697 + - 6.309731 + - 6.336775 + - 6.363832 + - 6.390904 + - 6.417991 + - 6.4450917 + - 6.472204 + - 6.4993258 + - 6.5264525 + - 6.553581 + - 6.580708 + - 6.6078296 + - 6.634942 + - 6.6620426 + - 6.68913 + - 6.716202 + - 6.743259 + - 6.770303 + - 6.7973366 + - 6.824365 + - 6.8513937 + - 6.8784275 + - 6.9054713 + - 6.9325285 + - 6.9596004 + - 6.9866877 + - 7.013788 + - 7.0409007 + - 7.0680223 + - 7.095149 + - 7.1222777 + - 7.1494045 + - 7.176526 + - 7.2036386 + - 7.230739 + - 7.2578263 + - 7.2848983 + - 7.3119555 + - 7.3389993 + - 7.366033 + - 7.3930616 + - 7.42009 + - 7.447124 + - 7.474168 + - 7.501225 + - 7.528297 + - 7.555384 + - 7.5824847 + - 7.609597 + - 7.6367188 + - 7.6638455 + - 7.690974 + - 7.718101 + - 7.7452226 + - 7.772335 + - 7.7994356 + - 7.826523 + - 7.853595 + - 7.880652 + - 7.907696 + - 7.9347296 + - 7.961758 + - 7.9887867 + - 8.0158205 + - 8.042865 + - 8.069922 + - 8.096994 + - 8.124082 + - 8.151182 + - 8.178294 + - 8.205416 + - 8.232543 + - 8.259672 + - 8.286799 + - 8.313921 + - 8.341033 + - 8.368134 + - 8.395221 + - 8.422293 + - 8.44935 + - 8.476395 + - 8.503428 + - 8.530457 + - 8.557485 + - 8.584518 + - 8.611563 + - 8.63862 + - 8.665692 + - 8.69278 + - 8.71988 + - 8.746992 + - 8.774114 + - 8.801241 + - 8.82837 + - 8.855497 + - 8.882619 + - 8.909731 + - 8.936831 + - 8.963919 + - 8.990991 + - 9.018048 + - 9.045093 + - 9.072126 + - 9.099154 + - 9.126183 + - 9.153216 + - 9.180261 + - 9.207318 + - 9.23439 + - 9.261477 + - 9.288578 + - 9.31569 + - 9.342812 + - 9.369939 + - 9.397068 + - 9.424195 + - 9.451317 + - 9.478429 + - 9.505529 + - 9.532617 + - 9.559689 + - 9.586746 + - 9.6137905 + - 9.640824 + - 9.667852 + - 9.6948805 + - 9.721914 + - 9.748959 + - 9.776016 + - 9.803088 + - 9.830175 + - 9.857276 + - 9.884388 + - 9.9115095 + - 9.938637 + - 9.965766 + - 9.992893 + - 10.020015 + - 10.047127 + - 10.074227 + - 10.101315 + - 10.1283865 + - 10.155444 + - 10.182488 + - 10.209522 + - 10.23655 + - 10.263578 + - 10.290612 + - 10.3176565 + - 10.344714 + - 10.371786 + - 10.398873 + - 10.425974 + - 10.453086 + - 10.480207 + - 10.507335 + - 10.534464 + - 10.561591 + - 10.588713 + - 10.615825 + - 10.642925 + - 10.670012 + - 10.697084 + - 10.724142 + - 10.751186 + - 10.77822 + - 10.805248 + - 10.832276 + - 10.85931 + - 10.886354 + - 10.913412 + - 10.940484 + - 10.967571 + - 10.994672 + - 11.021784 + - 11.048905 + - 11.076033 + - 11.103162 + - 11.130289 + - 11.157411 + - 11.184523 + - 11.211623 + - 11.23871 + - 11.265782 + - 11.29284 + - 11.319884 + - 11.346918 + - 11.373946 + - 11.400974 + - 11.428008 + - 11.455052 + - 11.48211 + - 11.509182 + - 11.536269 + - 11.56337 + - 11.590482 + - 11.617603 + - 11.644731 + - 11.67186 + - 11.698987 + - 11.726109 + - 11.753221 + - 11.780321 + - 11.807408 + - 11.83448 + - 11.861538 + - 11.888582 + - 11.915616 + - 11.942644 + - 11.969672 + - 11.996706 + - 12.02375 + - 12.050808 + - 12.07788 + - 12.104967 + - 12.132068 + - 12.15918 + - 12.186301 + - 12.2134285 + - 12.240558 + - 12.267685 + - 12.2948065 + - 12.3219185 + - 12.349019 + - 12.376106 + - 12.403178 + - 12.430236 + - 12.45728 + - 12.484314 + - 12.511342 + - 12.53837 + - 12.565404 + - 12.592448 + - 12.619506 + - 12.646578 + - 12.673665 + - 12.700766 + - 12.727878 + - 12.754999 + - 12.782126 + - 12.809256 + - 12.836383 + - 12.863504 + - 12.890616 + - 12.917717 + - 12.944804 + - 12.971876 + - 12.998934 + - 13.025978 + - 13.053012 + - 13.08004 + - 13.107068 + - 13.134102 + - 13.161146 + - 13.188204 + - 13.215276 + - 13.242363 + - 13.269464 + - 13.296576 + - 13.323697 + - 13.350824 + - 13.377954 + - 13.405081 + - 13.432202 + - 13.459314 + - 13.486415 + - 13.513502 + - 13.540574 + - 13.567632 + - 13.594676 + - 13.62171 + - 13.648738 + - 13.675766 + - 13.7028 + - 13.729844 + - 13.756902 + - 13.783974 + - 13.811061 + - 13.838161 + - 13.865273 + - 13.892395 + - 13.919522 + - 13.946651 + - 13.973779 + - 14.0009 + - 14.028012 + - 14.055113 + - 14.0822 + - 14.109272 + - 14.13633 + - 14.163374 + - 14.190408 + - 14.217436 + - 14.244464 + - 14.271498 + - 14.298542 + - 14.3256 + - 14.352672 + - 14.379759 + - 14.406859 + - 14.433971 + - 14.461093 + - 14.48822 + - 14.515349 + - 14.542477 + - 14.569598 + - 14.59671 + - 14.623811 + - 14.650898 + - 14.67797 + - 14.705028 + - 14.732072 + - 14.759106 + - 14.786134 + - 14.813162 + - 14.840196 + - 14.86724 + - 14.894298 + - 14.92137 + - 14.948457 + - 14.975557 + - 15.002669 + - 15.029791 + - 15.056918 + - 15.084047 + - 15.111175 + - 15.138296 + - 15.165408 + - 15.192509 + - 15.219596 + - 15.246668 + - 15.2737255 + - 15.30077 + - 15.327804 + - 15.354832 + - 15.38186 + - 15.408894 + - 15.435938 + - 15.462996 + - 15.4900675 + - 15.517155 + - 15.544255 + - 15.571367 + - 15.598489 + - 15.625616 + - 15.652745 + - 15.6798725 + - 15.706994 + - 15.734106 + - 15.761207 + - 15.788294 + - 15.815366 + - 15.842423 + - 15.869468 + - 15.896502 + - 15.92353 + - 15.950558 + - 15.9775915 + - 16.004635 + - 16.031693 + - 16.058765 + - 16.085852 + - 16.112953 + - 16.140066 + - 16.167187 + - 16.194313 + - 16.221441 + - 16.248568 + - 16.275688 + - 16.302801 + - 16.329903 + - 16.356989 + - 16.384062 + - 16.41112 + - 16.438164 + - 16.465197 + - 16.492226 + m_TotalSplineLenght: 16.492226 + 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.25 + m_InterParticleDistance: 0.28434873 + totalParticles: 59 + m_RestLength: 16.384266 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f00000020000000200000002100000021000000220000002200000023000000230000002400000024000000250000002500000026000000260000002700000027000000280000002800000029000000290000002a0000002a0000002b0000002b0000002c0000002c0000002d0000002d0000002e0000002e0000002f0000002f00000030000000300000003100000031000000320000003200000033000000330000003400000034000000350000003500000036000000360000003700000037000000380000003800000039000000390000003a000000 + restLengths: + - 0.28248742 + - 0.28248742 + - 0.28248745 + - 0.28248745 + - 0.28248742 + - 0.28248748 + - 0.28248745 + - 0.28248742 + - 0.28248745 + - 0.28248742 + - 0.28248778 + - 0.28248727 + - 0.28248748 + - 0.28248754 + - 0.28248778 + - 0.28248724 + - 0.2824875 + - 0.2824875 + - 0.2824875 + - 0.2824875 + - 0.2824875 + - 0.28248748 + - 0.2824875 + - 0.28248754 + - 0.2824875 + - 0.2824875 + - 0.28248748 + - 0.2824875 + - 0.28248698 + - 0.28248748 + - 0.28248855 + - 0.28248698 + - 0.28248754 + - 0.2824875 + - 0.28248748 + - 0.28248748 + - 0.28248644 + - 0.28248855 + - 0.2824872 + - 0.28248718 + - 0.2824872 + - 0.2824872 + - 0.28248718 + - 0.2824872 + - 0.28248718 + - 0.28248718 + - 0.28248823 + - 0.2824861 + - 0.28248614 + - 0.28248826 + - 0.28248715 + - 0.2824872 + - 0.2824872 + - 0.2824872 + - 0.28248718 + - 0.28248718 + - 0.2824872 + - 0.28248715 + - 0 + keepInitialShape: 1 +--- !u!114 &237785562514482078 +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: control point 28 + m_EditorClassIdentifier: + particleIndices: 38000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &1526367778732422361 +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: control point 24 + m_EditorClassIdentifier: + particleIndices: 30000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &2090210430256682874 +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: control point 8 + m_EditorClassIdentifier: + particleIndices: 10000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &2371962795392660606 +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: control point 1 + m_EditorClassIdentifier: + particleIndices: 02000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &3535050140158790076 +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: control point 13 + m_EditorClassIdentifier: + particleIndices: 1a000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &3949240139764315219 +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: control point 12 + m_EditorClassIdentifier: + particleIndices: 18000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &4748757721283841919 +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: control point 3 + m_EditorClassIdentifier: + particleIndices: 06000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &5743642769677576324 +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: control point 7 + m_EditorClassIdentifier: + particleIndices: 0e000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &6595340479447865845 +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: control point 25 + m_EditorClassIdentifier: + particleIndices: 32000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &7514755403420506347 +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: control point 16 + m_EditorClassIdentifier: + particleIndices: 20000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &7744494324993175841 +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: control point 6 + m_EditorClassIdentifier: + particleIndices: 0c000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &8073728408466097637 +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: control point 11 + m_EditorClassIdentifier: + particleIndices: 16000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &8392284965903659261 +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: control point 14 + m_EditorClassIdentifier: + particleIndices: 1c000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &8436558200313416828 +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: control point 15 + m_EditorClassIdentifier: + particleIndices: 1e000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &8516833290342707563 +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: control point 18 + m_EditorClassIdentifier: + particleIndices: 24000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &9190015862606898100 +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: control point 29 + m_EditorClassIdentifier: + particleIndices: 3a000000 + m_Blueprint: {fileID: 11400000} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/SpringRod.asset.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/SpringRod.asset.meta new file mode 100644 index 00000000..054979ae --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/SpringRod.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b74d67cfe23804ec1b4f215ac5e3d500 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight long rope.asset b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight long rope.asset new file mode 100644 index 00000000..9524f728 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight long rope.asset @@ -0,0 +1,1994 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-8864857226987616246 +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: control point + m_EditorClassIdentifier: + particleIndices: 0b000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-2639811391673711616 +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: Straight long rope + m_EditorClassIdentifier: + m_Checksum: 540814145 + m_Empty: 0 + m_Edited: 0 + m_ActiveParticleCount: 12 + m_InitialActiveParticleCount: 12 + _bounds: + m_Center: {x: 0, y: 0.000000011620729, z: 0} + m_Extent: {x: 1, y: 0.000000011620729, z: 0} + positions: + - {x: -1, y: 0, z: 0} + - {x: -0.81866354, y: 0.000000023241459, z: 0} + - {x: -0.6374941, y: 0.000000022447937, z: 0} + - {x: -0.45539066, y: 0.000000020707985, z: 0} + - {x: -0.27319038, y: 0.000000018467768, z: 0} + - {x: -0.09126747, y: 0.000000015923687, z: 0} + - {x: 0.09076936, y: 0.000000013179169, z: 0} + - {x: 0.27281737, y: 0.000000010311938, z: 0} + - {x: 0.45461026, y: 0.0000000073946174, z: 0} + - {x: 0.6365024, y: 0.0000000045053, z: 0} + - {x: 0.8192139, y: 0.0000000017929351, 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: -1, y: 0, z: 0, w: 1} + - {x: -0.81866354, y: 0.000000023241459, z: 0, w: 1} + - {x: -0.6374941, y: 0.000000022447937, z: 0, w: 1} + - {x: -0.45539066, y: 0.000000020707985, z: 0, w: 1} + - {x: -0.27319038, y: 0.000000018467768, z: 0, w: 1} + - {x: -0.09126747, y: 0.000000015923687, z: 0, w: 1} + - {x: 0.09076936, y: 0.000000013179169, z: 0, w: 1} + - {x: 0.27281737, y: 0.000000010311938, z: 0, w: 1} + - {x: 0.45461026, y: 0.0000000073946174, z: 0, w: 1} + - {x: 0.6365024, y: 0.0000000045053, z: 0, w: 1} + - {x: 0.8192139, y: 0.0000000017929351, 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} + 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} + angularVelocities: [] + invMasses: + - 10 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 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: 010000000100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + 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.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, 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: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b000000 + triangles: + distanceConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f0000003000000031000000320000003300000034000000350000003600000037000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f0000003000000031000000320000003300000034000000350000003600000037000000 + m_ConstraintCount: 56 + m_ActiveConstraintCount: 6 + m_InitialActiveConstraintCount: 6 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.18133646 + - 0.18210343 + - 0.18192291 + - 0.18204802 + - 0.18189213 + - 0.18078607 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f00000030000000310000003200000033000000340000003500000036000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f00000030000000310000003200000033000000340000003500000036000000 + m_ConstraintCount: 55 + m_ActiveConstraintCount: 5 + m_InitialActiveConstraintCount: 5 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.18116945 + - 0.18220028 + - 0.18203682 + - 0.18179289 + - 0.18271154 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + m_AlignBytes: 16 + bendConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000 + m_ConstraintCount: 37 + m_ActiveConstraintCount: 4 + m_InitialActiveConstraintCount: 4 + particleIndices: + serializedContents: 000000000200000001000000030000000500000004000000060000000800000007000000090000000b0000000a0000000c0000000e0000000d0000000f0000001100000010000000120000001400000013000000150000001700000016000000180000001a000000190000001b0000001d0000001c0000001e000000200000001f0000002100000023000000220000002400000026000000250000002700000029000000280000002a0000002c0000002b0000002d0000002f0000002e000000300000003200000031000000330000003500000034000000360000003800000037000000390000003b0000003a0000003c0000003e0000003d0000003f0000004100000040000000420000004400000043000000450000004700000046000000480000004a000000490000004b0000004d0000004c0000004e000000500000004f0000005100000053000000520000005400000056000000550000005700000059000000580000005a0000005c0000005b0000005d0000005f0000005e000000600000006200000061000000630000006500000064000000660000006800000067000000690000006b0000006a0000006c0000006e0000006d000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.00005567074 + - 0.00009247661 + - 0.000085026026 + - 0.0006418228 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000 + m_ConstraintCount: 37 + m_ActiveConstraintCount: 3 + m_InitialActiveConstraintCount: 3 + particleIndices: + serializedContents: 0100000003000000020000000400000006000000050000000700000009000000080000000a0000000c0000000b0000000d0000000f0000000e000000100000001200000011000000130000001500000014000000160000001800000017000000190000001b0000001a0000001c0000001e0000001d0000001f0000002100000020000000220000002400000023000000250000002700000026000000280000002a000000290000002b0000002d0000002c0000002e000000300000002f0000003100000033000000320000003400000036000000350000003700000039000000380000003a0000003c0000003b0000003d0000003f0000003e000000400000004200000041000000430000004500000044000000460000004800000047000000490000004b0000004a0000004c0000004e0000004d0000004f0000005100000050000000520000005400000053000000550000005700000056000000580000005a000000590000005b0000005d0000005c0000005e000000600000005f0000006100000063000000620000006400000066000000650000006700000069000000680000006a0000006c0000006b0000006d0000006f0000006e000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.00031131506 + - 0.00003796816 + - 0.000033080578 + - 0.3935954 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000210000002200000023000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000210000002200000023000000 + m_ConstraintCount: 36 + m_ActiveConstraintCount: 3 + m_InitialActiveConstraintCount: 3 + particleIndices: + serializedContents: 020000000400000003000000050000000700000006000000080000000a000000090000000b0000000d0000000c0000000e000000100000000f0000001100000013000000120000001400000016000000150000001700000019000000180000001a0000001c0000001b0000001d0000001f0000001e000000200000002200000021000000230000002500000024000000260000002800000027000000290000002b0000002a0000002c0000002e0000002d0000002f0000003100000030000000320000003400000033000000350000003700000036000000380000003a000000390000003b0000003d0000003c0000003e000000400000003f0000004100000043000000420000004400000046000000450000004700000049000000480000004a0000004c0000004b0000004d0000004f0000004e000000500000005200000051000000530000005500000054000000560000005800000057000000590000005b0000005a0000005c0000005e0000005d0000005f0000006100000060000000620000006400000063000000650000006700000066000000680000006a000000690000006b0000006d0000006c000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.000032275915 + - 0.0000037252903 + - 0.0002731681 + - 0.33333334 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + skinConstraintsData: + batches: [] + tetherConstraintsData: + batches: [] + stretchShearConstraintsData: + batches: [] + bendTwistConstraintsData: + batches: [] + shapeMatchingConstraintsData: + batches: [] + aerodynamicConstraintsData: + 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: + batches: [] + groups: + - {fileID: -2639811391673711616} + - {fileID: 8225853497016287227} + - {fileID: -8864857226987616246} + path: + m_Names: + - start + - start 2 + - control point + m_Points: + data: + - tangentMode: 0 + inTangent: {x: -0.25, y: -0, z: -0} + position: {x: -1, y: 0, z: 0} + outTangent: {x: 0.03645277, y: 0, z: 0} + - tangentMode: 0 + inTangent: {x: -0.08185488, y: 0, z: 0} + position: {x: -0.81866354, y: 0.000000023241459, z: 0} + outTangent: {x: 0.47952083, y: -0, z: -0} + - tangentMode: 0 + inTangent: {x: -0.21354723, 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} + - {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.10000001 + - 0.1 + m_RotationalMasses: + data: + - 1 + - 1 + - 1 + m_Filters: + data: 010000000100ffff0100ffff + m_Closed: 0 + m_ArcLengthTable: + - 0 + - 0.005387491 + - 0.01113154 + - 0.017227126 + - 0.023669228 + - 0.030452823 + - 0.037572894 + - 0.045024417 + - 0.05280237 + - 0.06090173 + - 0.06931748 + - 0.07804461 + - 0.08707808 + - 0.096412875 + - 0.10604398 + - 0.115966365 + - 0.12617502 + - 0.13666491 + - 0.14743102 + - 0.15846832 + - 0.1697718 + - 0.18133645 + - 0.25406623 + - 0.33457667 + - 0.4218583 + - 0.51490164 + - 0.61269724 + - 0.7142356 + - 0.81850725 + - 0.9245027 + - 1.0312124 + - 1.1376271 + - 1.2427373 + - 1.3455333 + - 1.4450057 + - 1.540145 + - 1.6299419 + - 1.7133868 + - 1.7894702 + - 1.8571827 + - 1.9155148 + - 1.9634571 + - 2 + m_TotalSplineLenght: 2 + 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.18181819 + totalParticles: 112 + m_RestLength: 20.181805 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b000000 + restLengths: + - 0.18133646 + - 0.18116945 + - 0.18210343 + - 0.18220028 + - 0.18192291 + - 0.18203682 + - 0.18204802 + - 0.18179289 + - 0.18189213 + - 0.18271154 + - 0.18078607 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0.18181819 + - 0 + pooledParticles: 100 +--- !u!114 &8225853497016287227 +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 2 + m_EditorClassIdentifier: + particleIndices: 01000000 + m_Blueprint: {fileID: 11400000} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight long rope.asset.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight long rope.asset.meta new file mode 100644 index 00000000..aff3b1fb --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight long rope.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d82adbfa2e0744621823a657cc1d4d9a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight short rope.asset b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight short rope.asset new file mode 100644 index 00000000..2ca420ee --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight short rope.asset @@ -0,0 +1,1948 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-3735696104525882986 +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: 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: Straight short rope + m_EditorClassIdentifier: + m_Checksum: 350243151 + m_Empty: 0 + m_Edited: 0 + m_ActiveParticleCount: 12 + m_InitialActiveParticleCount: 12 + _bounds: + m_Center: {x: -0.014654756, y: -0.003113268, z: -0.000000035141756} + m_Extent: {x: 1.008603, y: 0.003113268, z: 0.000000035141756} + positions: + - {x: -1.0232577, y: -0.004003763, z: -0.000000040919517} + - {x: -0.8402848, y: -0.0058813426, z: -0.000000065107734} + - {x: -0.6568456, y: -0.0062265354, z: -0.00000007028351} + - {x: -0.47382993, y: -0.00605443, z: -0.00000006903121} + - {x: -0.28994402, y: -0.0055968887, z: -0.00000006423151} + - {x: -0.10648872, y: -0.0049578818, z: -0.000000057165757} + - {x: 0.07712405, y: -0.0041927667, z: -0.000000048520462} + - {x: 0.2608242, y: -0.0033398687, z: -0.000000038766125} + - {x: 0.44427413, y: -0.0024321422, z: -0.000000028302512} + - {x: 0.62759423, y: -0.0015031539, z: -0.000000017532427} + - {x: 0.81105286, y: -0.00060960755, z: -0.0000000071262485} + - {x: 0.9939482, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {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.0232577, y: -0.004003763, z: -0.000000040919517, w: 1} + - {x: -0.8402848, y: -0.0058813426, z: -0.000000065107734, w: 1} + - {x: -0.6568456, y: -0.0062265354, z: -0.00000007028351, w: 1} + - {x: -0.47382993, y: -0.00605443, z: -0.00000006903121, w: 1} + - {x: -0.28994402, y: -0.0055968887, z: -0.00000006423151, w: 1} + - {x: -0.10648872, y: -0.0049578818, z: -0.000000057165757, w: 1} + - {x: 0.07712405, y: -0.0041927667, z: -0.000000048520462, w: 1} + - {x: 0.2608242, y: -0.0033398687, z: -0.000000038766125, w: 1} + - {x: 0.44427413, y: -0.0024321422, z: -0.000000028302512, w: 1} + - {x: 0.62759423, y: -0.0015031539, z: -0.000000017532427, w: 1} + - {x: 0.81105286, y: -0.00060960755, z: -0.0000000071262485, w: 1} + - {x: 0.9939482, 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} + 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} + angularVelocities: [] + invMasses: + - 10 + - 10 + - 10 + - 10 + - 10.000001 + - 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: 0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + 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.099999994, y: 0.099999994, z: 0.099999994} + - {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: 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: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0, b: 0, a: 0} + - {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: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b000000 + triangles: + distanceConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f0000003000000031000000320000003300000034000000350000003600000037000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f0000003000000031000000320000003300000034000000350000003600000037000000 + m_ConstraintCount: 56 + m_ActiveConstraintCount: 6 + m_InitialActiveConstraintCount: 6 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.18298253 + - 0.18301578 + - 0.18345642 + - 0.18370213 + - 0.18332246 + - 0.18289638 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f00000030000000310000003200000033000000340000003500000036000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f00000030000000310000003200000033000000340000003500000036000000 + m_ConstraintCount: 55 + m_ActiveConstraintCount: 5 + m_InitialActiveConstraintCount: 5 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.18343952 + - 0.18388647 + - 0.18361436 + - 0.18345217 + - 0.1834608 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + m_AlignBytes: 16 + bendConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000 + m_ConstraintCount: 37 + m_ActiveConstraintCount: 4 + m_InitialActiveConstraintCount: 4 + particleIndices: + serializedContents: 000000000200000001000000030000000500000004000000060000000800000007000000090000000b0000000a0000000c0000000e0000000d0000000f0000001100000010000000120000001400000013000000150000001700000016000000180000001a000000190000001b0000001d0000001c0000001e000000200000001f0000002100000023000000220000002400000026000000250000002700000029000000280000002a0000002c0000002b0000002d0000002f0000002e000000300000003200000031000000330000003500000034000000360000003800000037000000390000003b0000003a0000003c0000003e0000003d0000003f0000004100000040000000420000004400000043000000450000004700000046000000480000004a000000490000004b0000004d0000004c0000004e000000500000004f0000005100000053000000520000005400000056000000550000005700000059000000580000005a0000005c0000005b0000005d0000005f0000005e000000600000006200000061000000630000006500000064000000660000006800000067000000690000006b0000006a0000006c0000006e0000006d000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.000533925 + - 0.00015575346 + - 0.00008539532 + - 0.00021026109 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000 + m_ConstraintCount: 37 + m_ActiveConstraintCount: 3 + m_InitialActiveConstraintCount: 3 + particleIndices: + serializedContents: 0100000003000000020000000400000006000000050000000700000009000000080000000a0000000c0000000b0000000d0000000f0000000e000000100000001200000011000000130000001500000014000000160000001800000017000000190000001b0000001a0000001c0000001e0000001d0000001f0000002100000020000000220000002400000023000000250000002700000026000000280000002a000000290000002b0000002d0000002c0000002e000000300000002f0000003100000033000000320000003400000036000000350000003700000039000000380000003a0000003c0000003b0000003d0000003f0000003e000000400000004200000041000000430000004500000044000000460000004800000047000000490000004b0000004a0000004c0000004e0000004d0000004f0000005100000050000000520000005400000053000000550000005700000056000000580000005a000000590000005b0000005d0000005c0000005e000000600000005f0000006100000063000000620000006400000066000000650000006700000069000000680000006a0000006c0000006b0000006d0000006f0000006e000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.000222833 + - 0.000067247085 + - 0.000043820077 + - 0.3922813 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000210000002200000023000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000210000002200000023000000 + m_ConstraintCount: 36 + m_ActiveConstraintCount: 3 + m_InitialActiveConstraintCount: 3 + particleIndices: + serializedContents: 020000000400000003000000050000000700000006000000080000000a000000090000000b0000000d0000000c0000000e000000100000000f0000001100000013000000120000001400000016000000150000001700000019000000180000001a0000001c0000001b0000001d0000001f0000001e000000200000002200000021000000230000002500000024000000260000002800000027000000290000002b0000002a0000002c0000002e0000002d0000002f0000003100000030000000320000003400000033000000350000003700000036000000380000003a000000390000003b0000003d0000003c0000003e000000400000003f0000004100000043000000420000004400000046000000450000004700000049000000480000004a0000004c0000004b0000004d0000004f0000004e000000500000005200000051000000530000005500000054000000560000005800000057000000590000005b0000005a0000005c0000005e0000005d0000005f0000006100000060000000620000006400000063000000650000006700000066000000680000006a000000690000006b0000006d0000006c000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.00030530005 + - 0.0000412846 + - 0.000047680373 + - 0.33131608 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + skinConstraintsData: + batches: [] + tetherConstraintsData: + batches: [] + stretchShearConstraintsData: + batches: [] + bendTwistConstraintsData: + batches: [] + shapeMatchingConstraintsData: + batches: [] + aerodynamicConstraintsData: + 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: + batches: [] + groups: + - {fileID: -3735696104525882986} + - {fileID: 8673311686603544650} + path: + m_Names: + - end + - start + m_Points: + data: + - tangentMode: 0 + inTangent: {x: -0.24993046, y: 0.005883569, z: 0.00000007420739} + position: {x: -1.0232577, y: -0.004003763, z: -0.000000040919517} + outTangent: {x: 0.28647715, y: -0.006743908, z: -0.000000085058545} + - tangentMode: 0 + inTangent: {x: -0.25, y: 0, z: 0} + position: {x: 0.9939482, 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: 0100ffff0100ffff + m_Closed: 0 + m_ArcLengthTable: + - 0 + - 0.048795197 + - 0.11226323 + - 0.18883544 + - 0.27694184 + - 0.37501186 + - 0.48147476 + - 0.5947595 + - 0.7132952 + - 0.83551073 + - 0.959835 + - 1.084697 + - 1.2085254 + - 1.3297491 + - 1.446797 + - 1.558098 + - 1.6620806 + - 1.757174 + - 1.841807 + - 1.9144083 + - 1.9734069 + - 2.0172317 + m_TotalSplineLenght: 2.0172317 + 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.1833847 + totalParticles: 112 + m_RestLength: 20.355694 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b000000 + restLengths: + - 0.18298253 + - 0.18343952 + - 0.18301578 + - 0.18388647 + - 0.18345642 + - 0.18361436 + - 0.18370213 + - 0.18345217 + - 0.18332246 + - 0.1834608 + - 0.18289638 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0.1833847 + - 0 + pooledParticles: 100 +--- !u!114 &8673311686603544650 +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: 0b000000 + m_Blueprint: {fileID: 11400000} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight short rope.asset.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight short rope.asset.meta new file mode 100644 index 00000000..53037ee2 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight short rope.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ca9e262f11fb246cbb6d2177bacb27ea +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeA.asset b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeA.asset new file mode 100644 index 00000000..90d3b4e4 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeA.asset @@ -0,0 +1,1607 @@ +%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} + 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/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeA.asset.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeA.asset.meta new file mode 100644 index 00000000..3dd9abe0 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeB.asset b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeB.asset new file mode 100644 index 00000000..c4027d63 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeB.asset @@ -0,0 +1,2166 @@ +%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} + 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/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeB.asset.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeB.asset.meta new file mode 100644 index 00000000..90cb0038 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Tearable cable.asset b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Tearable cable.asset new file mode 100644 index 00000000..ccba6587 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Tearable cable.asset @@ -0,0 +1,2040 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-2436371210810594525 +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: Tearable cable + m_EditorClassIdentifier: + m_Checksum: 772348344 + m_Empty: 0 + m_Edited: 0 + m_ActiveParticleCount: 12 + m_InitialActiveParticleCount: 12 + _bounds: + m_Center: {x: 0.000000059604645, y: 0, z: 0} + m_Extent: {x: 0.99999994, y: 0, z: 0} + positions: + - {x: -0.9999999, y: 0, z: 0} + - {x: -0.8180145, y: 0, z: 0} + - {x: -0.63601965, y: 0, z: 0} + - {x: -0.45342994, y: 0, z: 0} + - {x: -0.27104864, y: 0, z: 0} + - {x: -0.08854285, y: 0, z: 0} + - {x: 0.09398375, y: 0, z: 0} + - {x: 0.27651137, y: 0, z: 0} + - {x: 0.45895523, y: 0, z: 0} + - {x: 0.6413379, y: 0, z: 0} + - {x: 0.8234298, y: 0, 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.9999999, y: 0, z: 0, w: 1} + - {x: -0.8180145, y: 0, z: 0, w: 1} + - {x: -0.63601965, y: 0, z: 0, w: 1} + - {x: -0.45342994, y: 0, z: 0, w: 1} + - {x: -0.27104864, y: 0, z: 0, w: 1} + - {x: -0.08854285, y: 0, z: 0, w: 1} + - {x: 0.09398375, y: 0, z: 0, w: 1} + - {x: 0.27651137, y: 0, z: 0, w: 1} + - {x: 0.45895523, y: 0, z: 0, w: 1} + - {x: 0.6413379, y: 0, z: 0, w: 1} + - {x: 0.8234298, y: 0, 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} + 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} + angularVelocities: [] + invMasses: + - 10 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 9.999999 + - 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: 010000000100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100ffff0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + 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.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, 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: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b000000 + triangles: + distanceConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f0000003000000031000000320000003300000034000000350000003600000037000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f0000003000000031000000320000003300000034000000350000003600000037000000 + m_ConstraintCount: 56 + m_ActiveConstraintCount: 6 + m_InitialActiveConstraintCount: 6 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.18198538 + - 0.18258971 + - 0.18250579 + - 0.18252763 + - 0.18238264 + - 0.17657018 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f00000030000000310000003200000033000000340000003500000036000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f00000030000000310000003200000033000000340000003500000036000000 + m_ConstraintCount: 55 + m_ActiveConstraintCount: 5 + m_InitialActiveConstraintCount: 5 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.18199486 + - 0.1823813 + - 0.18252659 + - 0.18244386 + - 0.18209195 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + m_AlignBytes: 16 + bendConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000 + m_ConstraintCount: 37 + m_ActiveConstraintCount: 4 + m_InitialActiveConstraintCount: 4 + particleIndices: + serializedContents: 000000000200000001000000030000000500000004000000060000000800000007000000090000000b0000000a0000000c0000000e0000000d0000000f0000001100000010000000120000001400000013000000150000001700000016000000180000001a000000190000001b0000001d0000001c0000001e000000200000001f0000002100000023000000220000002400000026000000250000002700000029000000280000002a0000002c0000002b0000002d0000002f0000002e000000300000003200000031000000330000003500000034000000360000003800000037000000390000003b0000003a0000003c0000003e0000003d0000003f0000004100000040000000420000004400000043000000450000004700000046000000480000004a000000490000004b0000004d0000004c0000004e000000500000004f0000005100000053000000520000005400000056000000550000005700000059000000580000005a0000005c0000005b0000005d0000005f0000005e000000600000006200000061000000630000006500000064000000660000006800000067000000690000006b0000006a0000006c0000006e0000006d000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.0000032186508 + - 0.000041484833 + - 0.000027924776 + - 0.0018405914 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000 + m_ConstraintCount: 37 + m_ActiveConstraintCount: 3 + m_InitialActiveConstraintCount: 3 + particleIndices: + serializedContents: 0100000003000000020000000400000006000000050000000700000009000000080000000a0000000c0000000b0000000d0000000f0000000e000000100000001200000011000000130000001500000014000000160000001800000017000000190000001b0000001a0000001c0000001e0000001d0000001f0000002100000020000000220000002400000023000000250000002700000026000000280000002a000000290000002b0000002d0000002c0000002e000000300000002f0000003100000033000000320000003400000036000000350000003700000039000000380000003a0000003c0000003b0000003d0000003f0000003e000000400000004200000041000000430000004500000044000000460000004800000047000000490000004b0000004a0000004c0000004e0000004d0000004f0000005100000050000000520000005400000053000000550000005700000056000000580000005a000000590000005b0000005d0000005c0000005e000000600000005f0000006100000063000000620000006400000066000000650000006700000069000000680000006a0000006c0000006b0000006d0000006f0000006e000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.00019830465 + - 0.0000069364905 + - 0.00002041459 + - 0.39219004 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000210000002200000023000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f00000020000000210000002200000023000000 + m_ConstraintCount: 36 + m_ActiveConstraintCount: 3 + m_InitialActiveConstraintCount: 3 + particleIndices: + serializedContents: 020000000400000003000000050000000700000006000000080000000a000000090000000b0000000d0000000c0000000e000000100000000f0000001100000013000000120000001400000016000000150000001700000019000000180000001a0000001c0000001b0000001d0000001f0000001e000000200000002200000021000000230000002500000024000000260000002800000027000000290000002b0000002a0000002c0000002e0000002d0000002f0000003100000030000000320000003400000033000000350000003700000036000000380000003a000000390000003b0000003d0000003c0000003e000000400000003f0000004100000043000000420000004400000046000000450000004700000049000000480000004a0000004c0000004b0000004d0000004f0000004e000000500000005200000051000000530000005500000054000000560000005800000057000000590000005b0000005a0000005c0000005e0000005d0000005f0000006100000060000000620000006400000063000000650000006700000066000000680000006a000000690000006b0000006d0000006c000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.00006946921 + - 0.0000003427267 + - 0.00009685755 + - 0.33333334 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + skinConstraintsData: + batches: [] + tetherConstraintsData: + batches: [] + stretchShearConstraintsData: + batches: [] + bendTwistConstraintsData: + batches: [] + shapeMatchingConstraintsData: + batches: [] + aerodynamicConstraintsData: + 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: + batches: [] + groups: + - {fileID: -2436371210810594525} + - {fileID: 5567824606580605130} + - {fileID: 1812756508894959938} + - {fileID: 1986289758551400005} + path: + m_Names: + - start + - start 2 + - end 2 + - end + m_Points: + data: + - tangentMode: 0 + inTangent: {x: -0.25, y: -0, z: -0} + position: {x: -0.9999999, y: 0, z: 0} + outTangent: {x: 0.03894329, y: 0, z: 0} + - tangentMode: 0 + inTangent: {x: -0.118860364, y: 0, z: 0} + position: {x: -0.8180145, y: 0, z: 0} + outTangent: {x: 0.40584582, y: 0, z: 0} + - tangentMode: 0 + inTangent: {x: -0.3901504, y: 0, z: 0} + position: {x: 0.8234298, y: 0, z: 0} + outTangent: {x: 0.079566, y: 0, z: 0} + - tangentMode: 0 + inTangent: {x: -0.035751224, 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} + - {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} + m_Thickness: + data: + - 1 + - 1 + - 1 + - 1 + m_Masses: + data: + - 0.1 + - 0.10000001 + - 0.1 + - 0.1 + m_RotationalMasses: + data: + - 1 + - 1 + - 1 + - 1 + m_Filters: + data: 010000000100ffff0100ffff01000000 + m_Closed: 0 + m_ArcLengthTable: + - 0 + - 0.0054747257 + - 0.010819517 + - 0.01610528 + - 0.021402916 + - 0.02678333 + - 0.03231743 + - 0.03807611 + - 0.04413028 + - 0.050550845 + - 0.05740871 + - 0.06477478 + - 0.072719954 + - 0.08131513 + - 0.090631224 + - 0.10073914 + - 0.111709766 + - 0.12361402 + - 0.1365228 + - 0.15050702 + - 0.16563757 + - 0.18198536 + - 0.2428572 + - 0.30913025 + - 0.3802247 + - 0.45556077 + - 0.53455865 + - 0.61663866 + - 0.70122087 + - 0.78772557 + - 0.875573 + - 0.9641833 + - 1.0529767 + - 1.1413735 + - 1.2287939 + - 1.3146579 + - 1.398386 + - 1.4793983 + - 1.5571148 + - 1.630956 + - 1.7003422 + - 1.7646933 + - 1.8234297 + - 1.8346709 + - 1.8456583 + - 1.8563873 + - 1.866853 + - 1.877051 + - 1.8869766 + - 1.896625 + - 1.9059918 + - 1.9150721 + - 1.9238613 + - 1.9323548 + - 1.940548 + - 1.948436 + - 1.9560144 + - 1.9632784 + - 1.9702234 + - 1.9768447 + - 1.9831376 + - 1.9890976 + - 1.9947199 + - 1.9999999 + m_TotalSplineLenght: 1.9999999 + 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.18181817 + totalParticles: 112 + m_RestLength: 20.181805 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b000000 + restLengths: + - 0.18198538 + - 0.18199486 + - 0.18258971 + - 0.1823813 + - 0.18250579 + - 0.18252659 + - 0.18252763 + - 0.18244386 + - 0.18238264 + - 0.18209195 + - 0.17657018 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0.18181817 + - 0 + pooledParticles: 100 +--- !u!114 &1812756508894959938 +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 2 + m_EditorClassIdentifier: + particleIndices: 0a000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &1986289758551400005 +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: 0b000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &5567824606580605130 +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 2 + m_EditorClassIdentifier: + particleIndices: 01000000 + m_Blueprint: {fileID: 11400000} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Tearable cable.asset.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Tearable cable.asset.meta new file mode 100644 index 00000000..2d03e771 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Tearable cable.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 61d053dd5abd943919947f833abd0569 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Very long cable.asset b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Very long cable.asset new file mode 100644 index 00000000..3d19345a --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Very long cable.asset @@ -0,0 +1,2098 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-8864857226987616246 +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: 15000000 + m_Blueprint: {fileID: 11400000} +--- !u!114 &-2639811391673711616 +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: Very long cable + m_EditorClassIdentifier: + m_Checksum: 3372886816 + m_Empty: 0 + m_Edited: 0 + m_ActiveParticleCount: 22 + m_InitialActiveParticleCount: 22 + _bounds: + m_Center: {x: 0.046942472, y: 0, z: 0} + m_Extent: {x: 2.0074086, y: 0, z: 0} + positions: + - {x: -1.9604661, y: 0, z: 0} + - {x: -1.7694254, y: 0, z: 0} + - {x: -1.5806047, y: 0, z: 0} + - {x: -1.389295, y: 0, z: 0} + - {x: -1.1973914, y: 0, z: 0} + - {x: -1.0051314, y: 0, z: 0} + - {x: -0.8140888, y: 0, z: 0} + - {x: -0.6233758, y: 0, z: 0} + - {x: -0.43183205, y: 0, z: 0} + - {x: -0.24002089, y: 0, z: 0} + - {x: -0.048776563, y: 0, z: 0} + - {x: 0.14270699, y: 0, z: 0} + - {x: 0.3342617, y: 0, z: 0} + - {x: 0.5250986, y: 0, z: 0} + - {x: 0.7168502, y: 0, z: 0} + - {x: 0.9088934, y: 0, z: 0} + - {x: 1.100491, y: 0, z: 0} + - {x: 1.2916275, y: 0, z: 0} + - {x: 1.4827894, y: 0, z: 0} + - {x: 1.6748782, y: 0, z: 0} + - {x: 1.86714, y: 0, z: 0} + - {x: 2.0543509, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 0} + - {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.9604661, y: 0, z: 0, w: 1} + - {x: -1.7694254, y: 0, z: 0, w: 1} + - {x: -1.5806047, y: 0, z: 0, w: 1} + - {x: -1.389295, y: 0, z: 0, w: 1} + - {x: -1.1973914, y: 0, z: 0, w: 1} + - {x: -1.0051314, y: 0, z: 0, w: 1} + - {x: -0.8140888, y: 0, z: 0, w: 1} + - {x: -0.6233758, y: 0, z: 0, w: 1} + - {x: -0.43183205, y: 0, z: 0, w: 1} + - {x: -0.24002089, y: 0, z: 0, w: 1} + - {x: -0.048776563, y: 0, z: 0, w: 1} + - {x: 0.14270699, y: 0, z: 0, w: 1} + - {x: 0.3342617, y: 0, z: 0, w: 1} + - {x: 0.5250986, y: 0, z: 0, w: 1} + - {x: 0.7168502, y: 0, z: 0, w: 1} + - {x: 0.9088934, y: 0, z: 0, w: 1} + - {x: 1.100491, y: 0, z: 0, w: 1} + - {x: 1.2916275, y: 0, z: 0, w: 1} + - {x: 1.4827894, y: 0, z: 0, w: 1} + - {x: 1.6748782, y: 0, z: 0, w: 1} + - {x: 1.86714, y: 0, z: 0, w: 1} + - {x: 2.0543509, 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} + 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} + angularVelocities: [] + invMasses: + - 10 + - 10.000001 + - 9.999999 + - 10.000001 + - 9.999999 + - 10.000001 + - 10 + - 10 + - 10 + - 10 + - 9.999999 + - 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: 0100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + principalRadii: + - {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.099999994, y: 0.099999994, z: 0.099999994} + - {x: 0.1, y: 0.1, z: 0.1} + - {x: 0.099999994, y: 0.099999994, z: 0.099999994} + - {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.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: 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: 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, 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: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f0000001000000010000000110000001100000012000000120000001300000013000000140000001400000015000000 + triangles: + distanceConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c000000 + m_ConstraintCount: 61 + m_ActiveConstraintCount: 11 + m_InitialActiveConstraintCount: 11 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f00000010000000110000001200000013000000140000001500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.19104075 + - 0.19130969 + - 0.19226003 + - 0.19071305 + - 0.19181116 + - 0.19148356 + - 0.19083694 + - 0.19204319 + - 0.19113648 + - 0.19208884 + - 0.1872108 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b000000 + m_ConstraintCount: 60 + m_ActiveConstraintCount: 10 + m_InitialActiveConstraintCount: 10 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 0.18882072 + - 0.19190359 + - 0.19104254 + - 0.19154373 + - 0.19124432 + - 0.1915547 + - 0.1917516 + - 0.19159764 + - 0.19116187 + - 0.19226182 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + m_AlignBytes: 16 + bendConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000250000002600000027000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000250000002600000027000000 + m_ConstraintCount: 40 + m_ActiveConstraintCount: 7 + m_InitialActiveConstraintCount: 7 + particleIndices: + serializedContents: 000000000200000001000000030000000500000004000000060000000800000007000000090000000b0000000a0000000c0000000e0000000d0000000f0000001100000010000000120000001400000013000000150000001700000016000000180000001a000000190000001b0000001d0000001c0000001e000000200000001f0000002100000023000000220000002400000026000000250000002700000029000000280000002a0000002c0000002b0000002d0000002f0000002e000000300000003200000031000000330000003500000034000000360000003800000037000000390000003b0000003a0000003c0000003e0000003d0000003f0000004100000040000000420000004400000043000000450000004700000046000000480000004a000000490000004b0000004d0000004c0000004e000000500000004f0000005100000053000000520000005400000056000000550000005700000059000000580000005a0000005c0000005b0000005d0000005f0000005e000000600000006200000061000000630000006500000064000000660000006800000067000000690000006b0000006a0000006c0000006e0000006d0000006f0000007100000070000000720000007400000073000000750000007700000076000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.00074005127 + - 0.00011873245 + - 0.00027686357 + - 0.000079743564 + - 0.00030487776 + - 0.00015366077 + - 0.000057578087 + - 0.68478364 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000250000002600000027000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000250000002600000027000000 + m_ConstraintCount: 40 + m_ActiveConstraintCount: 7 + m_InitialActiveConstraintCount: 7 + particleIndices: + serializedContents: 0100000003000000020000000400000006000000050000000700000009000000080000000a0000000c0000000b0000000d0000000f0000000e000000100000001200000011000000130000001500000014000000160000001800000017000000190000001b0000001a0000001c0000001e0000001d0000001f0000002100000020000000220000002400000023000000250000002700000026000000280000002a000000290000002b0000002d0000002c0000002e000000300000002f0000003100000033000000320000003400000036000000350000003700000039000000380000003a0000003c0000003b0000003d0000003f0000003e000000400000004200000041000000430000004500000044000000460000004800000047000000490000004b0000004a0000004c0000004e0000004d0000004f0000005100000050000000520000005400000053000000550000005700000056000000580000005a000000590000005b0000005d0000005c0000005e000000600000005f0000006100000063000000620000006400000066000000650000006700000069000000680000006a0000006c0000006b0000006d0000006f0000006e000000700000007200000071000000730000007500000074000000760000007800000077000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.00082969666 + - 0.00040578842 + - 0.000089138746 + - 0.000023707747 + - 0.00009715557 + - 0.00000846386 + - 0.0016838312 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000250000002600000027000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000250000002600000027000000 + m_ConstraintCount: 40 + m_ActiveConstraintCount: 6 + m_InitialActiveConstraintCount: 6 + particleIndices: + serializedContents: 020000000400000003000000050000000700000006000000080000000a000000090000000b0000000d0000000c0000000e000000100000000f0000001100000013000000120000001400000016000000150000001700000019000000180000001a0000001c0000001b0000001d0000001f0000001e000000200000002200000021000000230000002500000024000000260000002800000027000000290000002b0000002a0000002c0000002e0000002d0000002f0000003100000030000000320000003400000033000000350000003700000036000000380000003a000000390000003b0000003d0000003c0000003e000000400000003f0000004100000043000000420000004400000046000000450000004700000049000000480000004a0000004c0000004b0000004d0000004f0000004e000000500000005200000051000000530000005500000054000000560000005800000057000000590000005b0000005a0000005c0000005e0000005d0000005f0000006100000060000000620000006400000063000000650000006700000066000000680000006a000000690000006b0000006d0000006c0000006e000000700000006f000000710000007300000072000000740000007600000075000000770000007900000078000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restBends: + serializedContents: + - 0.00019788742 + - 0.00010985136 + - 0.00018894672 + - 0.00023925304 + - 0.00014853477 + - 0.00030899048 + - 0.74718726 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 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} + 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} + m_AlignBytes: 16 + skinConstraintsData: + batches: [] + tetherConstraintsData: + batches: [] + stretchShearConstraintsData: + batches: [] + bendTwistConstraintsData: + batches: [] + shapeMatchingConstraintsData: + batches: [] + aerodynamicConstraintsData: + 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: + batches: [] + groups: + - {fileID: -2639811391673711616} + - {fileID: -8864857226987616246} + path: + m_Names: + - start + - end + m_Points: + data: + - tangentMode: 0 + inTangent: {x: -0.25, y: -0, z: -0} + position: {x: -1.9604661, y: 0, z: 0} + outTangent: {x: 0.4065534, y: 0, z: 0} + - tangentMode: 0 + inTangent: {x: -0.21354723, y: 0, z: 0} + position: {x: 2.0543509, 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: 0100000001000000 + m_Closed: 0 + m_ArcLengthTable: + - 0 + - 0.077740535 + - 0.19213937 + - 0.33919954 + - 0.51492405 + - 0.71531594 + - 0.9363783 + - 1.174114 + - 1.4245261 + - 1.6836177 + - 1.9473919 + - 2.2118516 + - 2.4729998 + - 2.7268395 + - 2.969374 + - 3.196606 + - 3.4045386 + - 3.589175 + - 3.746518 + - 3.8725705 + - 3.963336 + - 4.014817 + m_TotalSplineLenght: 4.014817 + 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.19118178 + totalParticles: 122 + m_RestLength: 23.132986 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f0000001000000010000000110000001100000012000000120000001300000013000000140000001400000015000000 + restLengths: + - 0.19104075 + - 0.18882072 + - 0.19130969 + - 0.19190359 + - 0.19226003 + - 0.19104254 + - 0.19071305 + - 0.19154373 + - 0.19181116 + - 0.19124432 + - 0.19148356 + - 0.1915547 + - 0.19083694 + - 0.1917516 + - 0.19204319 + - 0.19159764 + - 0.19113648 + - 0.19116187 + - 0.19208884 + - 0.19226182 + - 0.1872108 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0.19118178 + - 0 + pooledParticles: 100 diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Very long cable.asset.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Very long cable.asset.meta new file mode 100644 index 00000000..09ed24b6 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Very long cable.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9d8ad1e0aac8f48deb9f3cda92974152 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/WrappingRope.asset b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/WrappingRope.asset new file mode 100644 index 00000000..2a822289 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/WrappingRope.asset @@ -0,0 +1,1978 @@ +%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: end + 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: WrappingRope + m_EditorClassIdentifier: + m_Checksum: 3688547798 + m_Empty: 0 + m_Edited: 0 + m_ActiveParticleCount: 114 + m_InitialActiveParticleCount: 114 + _bounds: + m_Center: {x: -38.584393, y: 0.0000137847255, z: 0} + m_Extent: {x: 39.455006, y: 0.0000137847255, z: 0} + positions: + - {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.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} + 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} + angularVelocities: [] + 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 + - 9.999999 + - 10 + - 10.000001 + - 9.999999 + - 9.999999 + - 10 + - 10.000001 + - 10.000001 + - 10 + - 9.999999 + - 9.999999 + - 10.000001 + - 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.000001 + - 10.000001 + - 10.000001 + - 10 + - 10 + - 10 + - 10.000001 + - 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 + 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} + - {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.35000002, y: 0.35000002, z: 0.35000002} + - {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.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.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.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} + - {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} + - {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.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.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.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.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.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} + 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} + - {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.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: 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: 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: 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: 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} + - {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} + - {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} + points: + edges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f00000020000000200000002100000021000000220000002200000023000000230000002400000024000000250000002500000026000000260000002700000027000000280000002800000029000000290000002a0000002a0000002b0000002b0000002c0000002c0000002d0000002d0000002e0000002e0000002f0000002f00000030000000300000003100000031000000320000003200000033000000330000003400000034000000350000003500000036000000360000003700000037000000380000003800000039000000390000003a0000003a0000003b0000003b0000003c0000003c0000003d0000003d0000003e0000003e0000003f0000003f00000040000000400000004100000041000000420000004200000043000000430000004400000044000000450000004500000046000000460000004700000047000000480000004800000049000000490000004a0000004a0000004b0000004b0000004c0000004c0000004d0000004d0000004e0000004e0000004f0000004f00000050000000500000005100000051000000520000005200000053000000530000005400000054000000550000005500000056000000560000005700000057000000580000005800000059000000590000005a0000005a0000005b0000005b0000005c0000005c0000005d0000005d0000005e0000005e0000005f0000005f00000060000000600000006100000061000000620000006200000063000000630000006400000064000000650000006500000066000000660000006700000067000000680000006800000069000000690000006a0000006a0000006b0000006b0000006c0000006c0000006d0000006d0000006e0000006e0000006f0000006f000000700000007000000071000000 + triangles: + distanceConstraintsData: + batches: + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000 + m_ConstraintCount: 57 + m_ActiveConstraintCount: 57 + m_InitialActiveConstraintCount: 57 + particleIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f0000007000000071000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 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: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {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: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f0000003000000031000000320000003300000034000000350000003600000037000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f0000003000000031000000320000003300000034000000350000003600000037000000 + m_ConstraintCount: 56 + m_ActiveConstraintCount: 56 + m_InitialActiveConstraintCount: 56 + particleIndices: + serializedContents: 0100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f00000070000000 + m_AlignBytes: 16 + lambdas: + serializedContents: [] + m_AlignBytes: 16 + restLengths: + serializedContents: + - 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: + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {x: 0, y: 0} + - {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: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000 + m_ConstraintCount: 38 + m_ActiveConstraintCount: 38 + m_InitialActiveConstraintCount: 38 + particleIndices: + serializedContents: 000000000200000001000000030000000500000004000000060000000800000007000000090000000b0000000a0000000c0000000e0000000d0000000f0000001100000010000000120000001400000013000000150000001700000016000000180000001a000000190000001b0000001d0000001c0000001e000000200000001f0000002100000023000000220000002400000026000000250000002700000029000000280000002a0000002c0000002b0000002d0000002f0000002e000000300000003200000031000000330000003500000034000000360000003800000037000000390000003b0000003a0000003c0000003e0000003d0000003f0000004100000040000000420000004400000043000000450000004700000046000000480000004a000000490000004b0000004d0000004c0000004e000000500000004f0000005100000053000000520000005400000056000000550000005700000059000000580000005a0000005c0000005b0000005d0000005f0000005e000000600000006200000061000000630000006500000064000000660000006800000067000000690000006b0000006a0000006c0000006e0000006d0000006f0000007100000070000000 + 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 + 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} + 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000 + m_ConstraintCount: 37 + m_ActiveConstraintCount: 37 + m_InitialActiveConstraintCount: 37 + particleIndices: + serializedContents: 0100000003000000020000000400000006000000050000000700000009000000080000000a0000000c0000000b0000000d0000000f0000000e000000100000001200000011000000130000001500000014000000160000001800000017000000190000001b0000001a0000001c0000001e0000001d0000001f0000002100000020000000220000002400000023000000250000002700000026000000280000002a000000290000002b0000002d0000002c0000002e000000300000002f0000003100000033000000320000003400000036000000350000003700000039000000380000003a0000003c0000003b0000003d0000003f0000003e000000400000004200000041000000430000004500000044000000460000004800000047000000490000004b0000004a0000004c0000004e0000004d0000004f0000005100000050000000520000005400000053000000550000005700000056000000580000005a000000590000005b0000005d0000005c0000005e000000600000005f0000006100000063000000620000006400000066000000650000006700000069000000680000006a0000006c0000006b0000006d0000006f0000006e000000 + 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 + 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} + 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} + m_AlignBytes: 16 + - m_IDs: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000 + m_IDToIndex: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f0000002000000021000000220000002300000024000000 + m_ConstraintCount: 37 + m_ActiveConstraintCount: 37 + m_InitialActiveConstraintCount: 37 + particleIndices: + serializedContents: 020000000400000003000000050000000700000006000000080000000a000000090000000b0000000d0000000c0000000e000000100000000f0000001100000013000000120000001400000016000000150000001700000019000000180000001a0000001c0000001b0000001d0000001f0000001e000000200000002200000021000000230000002500000024000000260000002800000027000000290000002b0000002a0000002c0000002e0000002d0000002f0000003100000030000000320000003400000033000000350000003700000036000000380000003a000000390000003b0000003d0000003c0000003e000000400000003f0000004100000043000000420000004400000046000000450000004700000049000000480000004a0000004c0000004b0000004d0000004f0000004e000000500000005200000051000000530000005500000054000000560000005800000057000000590000005b0000005a0000005c0000005e0000005d0000005f0000006100000060000000620000006400000063000000650000006700000066000000680000006a000000690000006b0000006d0000006c0000006e000000700000006f000000 + 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 + 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} + 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} + m_AlignBytes: 16 + skinConstraintsData: + batches: [] + tetherConstraintsData: + batches: [] + stretchShearConstraintsData: + batches: [] + bendTwistConstraintsData: + batches: [] + shapeMatchingConstraintsData: + batches: [] + aerodynamicConstraintsData: + 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: + batches: [] + groups: + - {fileID: -5578146735436999353} + - {fileID: 870036912147276740} + path: + m_Names: + - end + - start + m_Points: + data: + - tangentMode: 0 + inTangent: {x: -0.25, y: 0, 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} + position: {x: 0.87061304, y: -1.838695e-15, 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: 0100ffff0100ffff + m_Closed: 0 + m_ArcLengthTable: + - 0 + - 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: [] + OnControlPointAdded: + m_PersistentCalls: + m_Calls: [] + OnControlPointRemoved: + m_PersistentCalls: + m_Calls: [] + OnControlPointRenamed: + m_PersistentCalls: + m_Calls: [] + thickness: 0.35 + resolution: 0.5 + m_InterParticleDistance: 0.6983188 + totalParticles: 114 + m_RestLength: 78.910034 + deformableEdges: 000000000100000001000000020000000200000003000000030000000400000004000000050000000500000006000000060000000700000007000000080000000800000009000000090000000a0000000a0000000b0000000b0000000c0000000c0000000d0000000d0000000e0000000e0000000f0000000f00000010000000100000001100000011000000120000001200000013000000130000001400000014000000150000001500000016000000160000001700000017000000180000001800000019000000190000001a0000001a0000001b0000001b0000001c0000001c0000001d0000001d0000001e0000001e0000001f0000001f00000020000000200000002100000021000000220000002200000023000000230000002400000024000000250000002500000026000000260000002700000027000000280000002800000029000000290000002a0000002a0000002b0000002b0000002c0000002c0000002d0000002d0000002e0000002e0000002f0000002f00000030000000300000003100000031000000320000003200000033000000330000003400000034000000350000003500000036000000360000003700000037000000380000003800000039000000390000003a0000003a0000003b0000003b0000003c0000003c0000003d0000003d0000003e0000003e0000003f0000003f00000040000000400000004100000041000000420000004200000043000000430000004400000044000000450000004500000046000000460000004700000047000000480000004800000049000000490000004a0000004a0000004b0000004b0000004c0000004c0000004d0000004d0000004e0000004e0000004f0000004f00000050000000500000005100000051000000520000005200000053000000530000005400000054000000550000005500000056000000560000005700000057000000580000005800000059000000590000005a0000005a0000005b0000005b0000005c0000005c0000005d0000005d0000005e0000005e0000005f0000005f00000060000000600000006100000061000000620000006200000063000000630000006400000064000000650000006500000066000000660000006700000067000000680000006800000069000000690000006a0000006a0000006b0000006b0000006c0000006c0000006d0000006d0000006e0000006e0000006f0000006f000000700000007000000071000000 + restLengths: + - 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.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 +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: 71000000 + m_Blueprint: {fileID: 11400000} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/WrappingRope.asset.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/WrappingRope.asset.meta new file mode 100644 index 00000000..a0c762b5 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/WrappingRope.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7e05f85bfaeb24a649317f63f656b6bb +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials.meta new file mode 100644 index 00000000..b23bca2e --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2df1efc605b8b42ecaa6b259d0a7ce78 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainRed.mat b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainRed.mat new file mode 100644 index 00000000..07cc4cd0 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainRed.mat @@ -0,0 +1,83 @@ +%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: ChainRed + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: + - _EMISSION + m_InvalidKeywords: [] + m_LightmapFlags: 1 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EmissionScaleUI: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.6 + - _GlossyReflections: 1 + - _Metallic: 1 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 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} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainRed.mat.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainRed.mat.meta new file mode 100644 index 00000000..4ef19f21 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainRed.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b74081a5a5bbf418ea9f95bfec18f393 +labels: +- ObiRope +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainWhite.mat b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainWhite.mat new file mode 100644 index 00000000..3708a18e --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainWhite.mat @@ -0,0 +1,83 @@ +%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: ChainWhite + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: + - _EMISSION + m_InvalidKeywords: [] + m_LightmapFlags: 1 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EmissionScaleUI: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.6 + - _GlossyReflections: 1 + - _Metallic: 1 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 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} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainWhite.mat.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainWhite.mat.meta new file mode 100644 index 00000000..77811e85 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainWhite.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: edc856900ac3941a98996e21e91e215e +labels: +- ObiRope +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/GreenRope.mat b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/GreenRope.mat new file mode 100644 index 00000000..ff537963 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/GreenRope.mat @@ -0,0 +1,88 @@ +%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: GreenRope + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: + - _EMISSION + m_InvalidKeywords: [] + m_LightmapFlags: 1 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 1d4961a920a28426db6e5dbd2ed49050, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 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: 2800000, guid: 86f62345c38804a3a8d3e0a32ae8433d, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EmissionScaleUI: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.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} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/GreenRope.mat.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/GreenRope.mat.meta new file mode 100644 index 00000000..79421a01 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/GreenRope.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 03019be2b7a654429bf322c3ca0c7a0e +labels: +- ObiRope +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/LineRope.mat b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/LineRope.mat new file mode 100644 index 00000000..02bb586d --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/LineRope.mat @@ -0,0 +1,84 @@ +%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: LineRope + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: + - _EMISSION + - _NORMALMAP + m_InvalidKeywords: [] + m_LightmapFlags: 1 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 7a6d7fa80b2a444089c9b87ba93966c7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 61461ee4d289a4bc384e839abcf74473, 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: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EmissionScaleUI: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.4 + - _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} + - _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/LineRope.mat.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/LineRope.mat.meta new file mode 100644 index 00000000..c2185a45 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/LineRope.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4cc7d840058664f0f9a679178b33b5e4 +labels: +- ObiRope +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/RedRope.mat b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/RedRope.mat new file mode 100644 index 00000000..84364b22 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/RedRope.mat @@ -0,0 +1,84 @@ +%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: RedRope + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: + - _EMISSION + - _NORMALMAP + m_InvalidKeywords: [] + m_LightmapFlags: 1 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 1020609c9ac9f4a14a078c1afd37a75e, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 61461ee4d289a4bc384e839abcf74473, 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: 2800000, guid: 665db389e8f1e42acb689114a261cb06, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EmissionScaleUI: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.4 + - _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} + - _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/RedRope.mat.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/RedRope.mat.meta new file mode 100644 index 00000000..61f3463a --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/RedRope.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 44ab0cc40b59345718856f6e1c1225f3 +labels: +- ObiRope +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Rod.mat b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Rod.mat new file mode 100644 index 00000000..8aee6797 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Rod.mat @@ -0,0 +1,83 @@ +%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: Rod + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: + - _EMISSION + m_InvalidKeywords: [] + m_LightmapFlags: 1 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 49dd156e3b48f41f791e9d75107f6b38, 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: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EmissionScaleUI: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.7 + - _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} + - _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Rod.mat.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Rod.mat.meta new file mode 100644 index 00000000..5ae03971 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Rod.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9bc0d93bc33e445c7a765578064cdd1e +labels: +- ObiRope +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Shark.mat b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Shark.mat new file mode 100644 index 00000000..b56fc010 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Shark.mat @@ -0,0 +1,81 @@ +%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: Shark + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: + - _NORMALMAP + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: e4a9139c969c3419a813c9513127f817, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 9c47de74aec0642928f43bb91a7346b7, 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: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.75 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Shark.mat.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Shark.mat.meta new file mode 100644 index 00000000..f72c06f5 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Snake.mat b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Snake.mat new file mode 100644 index 00000000..ba8ad288 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Snake.mat @@ -0,0 +1,80 @@ +%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: Snake + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 61461ee4d289a4bc384e839abcf74473, 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: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.6 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Snake.mat.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Snake.mat.meta new file mode 100644 index 00000000..043f3666 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Snake.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dbda366779bfb4406b2c60e70986d306 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/TanglePeg.mat b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/TanglePeg.mat new file mode 100644 index 00000000..ff70ec77 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/TanglePeg.mat @@ -0,0 +1,80 @@ +%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: TanglePeg + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.8 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 0.7734498, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/TanglePeg.mat.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/TanglePeg.mat.meta new file mode 100644 index 00000000..d4d9026a --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/WrapPeg.mat b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/WrapPeg.mat new file mode 100644 index 00000000..0f6267e2 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/WrapPeg.mat @@ -0,0 +1,80 @@ +%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: WrapPeg + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.8 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.3568441, g: 0.9339623, b: 0.38412383, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/WrapPeg.mat.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/WrapPeg.mat.meta new file mode 100644 index 00000000..adcedd48 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/WrapPeg.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d402dacd6333443e5926c03c59b7b0ad +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models.meta new file mode 100644 index 00000000..8733e671 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2408079b738194e52942dd5e44c3e4aa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLink.fbx b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLink.fbx new file mode 100644 index 00000000..23abba9f Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLink.fbx differ diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLink.fbx.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLink.fbx.meta new file mode 100644 index 00000000..87efc2a0 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLink.fbx.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 70b5250dc71ea4b35987751a9843d8d6 +labels: +- ObiRope +ModelImporter: + serializedVersion: 23 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2300000: //RootNode + 3300000: //RootNode + 4300000: pCube1 + 9500000: //RootNode + externalObjects: {} + materials: + importMaterials: 0 + materialName: 0 + materialSearch: 1 + materialLocation: 0 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + importVisibility: 0 + importBlendShapes: 1 + importCameras: 0 + importLights: 0 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + previousCalculatedGlobalScale: 0.01 + hasPreviousCalculatedGlobalScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + importAnimation: 0 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 0 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 2 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkRed.prefab b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkRed.prefab new file mode 100644 index 00000000..4d68ba34 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkRed.prefab @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &116810 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 499758} + - component: {fileID: 3330700} + - component: {fileID: 2349612} + m_Layer: 0 + m_Name: ChainLinkRed + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &499758 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 116810} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 116810} + m_Mesh: {fileID: 4300000, guid: 70b5250dc71ea4b35987751a9843d8d6, type: 3} +--- !u!23 &2349612 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 116810} + 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: b74081a5a5bbf418ea9f95bfec18f393, 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} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkRed.prefab.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkRed.prefab.meta new file mode 100644 index 00000000..d30d2a00 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkRed.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2d2a7dadfeecb4ffc9bdbfa8ae0b4727 +labels: +- ObiRope +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkWhite.prefab b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkWhite.prefab new file mode 100644 index 00000000..fb9139b4 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkWhite.prefab @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &116810 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 499758} + - component: {fileID: 3330700} + - component: {fileID: 2349612} + m_Layer: 0 + m_Name: ChainLinkWhite + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &499758 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 116810} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 116810} + m_Mesh: {fileID: 4300000, guid: 70b5250dc71ea4b35987751a9843d8d6, type: 3} +--- !u!23 &2349612 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 116810} + 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: edc856900ac3941a98996e21e91e215e, 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} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkWhite.prefab.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkWhite.prefab.meta new file mode 100644 index 00000000..96dc456a --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkWhite.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1a25eaebcccc14ffeabd9b15641f8b51 +labels: +- ObiRope +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/shark.obj b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/shark.obj new file mode 100644 index 00000000..61058023 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/shark.obj.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/shark.obj.meta new file mode 100644 index 00000000..d065a02b --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/tentacle_guy.fbx b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/tentacle_guy.fbx new file mode 100644 index 00000000..69279067 Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/tentacle_guy.fbx differ diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/tentacle_guy.fbx.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/tentacle_guy.fbx.meta new file mode 100644 index 00000000..64f5ef49 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/tentacle_guy.fbx.meta @@ -0,0 +1,609 @@ +fileFormatVersion: 2 +guid: 643a73163dc8d4f0e904d6c0f6857999 +ModelImporter: + serializedVersion: 19301 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 0 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 3 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 10 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + 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: + - boneName: joint1 + humanName: Hips + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: joint2 + humanName: LeftUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: joint20 + humanName: RightUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: joint3 + humanName: LeftLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: joint21 + humanName: RightLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: joint4 + humanName: LeftFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: joint22 + humanName: RightFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: joint5 + humanName: Spine + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: joint6 + humanName: Chest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: joint8 + humanName: LeftUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: joint63 + humanName: RightUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: joint9 + humanName: LeftLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: joint64 + humanName: RightLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: joint10 + humanName: LeftHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: joint65 + humanName: RightHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: joint13 + humanName: LeftToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: joint23 + humanName: RightToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: joint7 + humanName: UpperChest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: joint14 + humanName: Head + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + skeleton: + - name: tentacle_guy(Clone) + parentName: + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: body_basemesh + parentName: tentacle_guy(Clone) + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: joint1 + parentName: tentacle_guy(Clone) + position: {x: -0, y: 1.3, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: joint2 + parentName: joint1 + position: {x: -0.13999999, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0.69631565, w: 0.71773577} + scale: {x: 1, y: 1, z: 1} + - name: joint3 + parentName: joint2 + position: {x: -0.66030294, y: -9.653175e-16, z: -0.03} + rotation: {x: 0.9997244, y: 0.023477284, z: 1.4375691e-18, w: 6.121546e-17} + scale: {x: 1, y: 1, z: 1} + - name: joint4 + parentName: joint3 + position: {x: -0.5100958, y: 0.0014997916, z: 0.06} + rotation: {x: 0.7011903, y: 0.7129742, z: 8.65926e-17, w: -7.2155487e-19} + scale: {x: 1, y: 1, z: 1} + - name: joint13 + parentName: joint4 + position: {x: -0.03, y: -0.104848675, z: 0.24} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: joint5 + parentName: joint1 + position: {x: -0, y: 0.25999996, z: 0} + rotation: {x: 0.461427, y: -0.53580326, z: -0.461427, w: 0.53580326} + scale: {x: 1, y: 1, z: 1} + - name: joint6 + parentName: joint5 + position: {x: -0.20223747, y: 7.2164494e-17, z: -4.490574e-17} + rotation: {x: -0.7051483, y: 0.052591935, z: -0.052591935, w: 0.7051483} + scale: {x: 1, y: 1, z: 1} + - name: joint7 + parentName: joint6 + position: {x: -0.36999997, y: -2.1944667e-14, z: -0.08999999} + rotation: {x: 0, y: 0, z: 0.7071068, w: 0.7071068} + scale: {x: 1, y: 1, z: 1} + - name: joint8 + parentName: joint7 + position: {x: -0.24, y: -0.12999998, z: 0.049999997} + rotation: {x: 0.000000005268355, y: 0.000000047415195, z: 0.030666016, w: 0.9995297} + scale: {x: 1, y: 1, z: 1} + - name: joint9 + parentName: joint8 + position: {x: -0.38948682, y: -4.1524551e-16, z: 1.11022296e-17} + rotation: {x: 0.0030285313, y: -0.12718104, z: -0.042866673, w: 0.99094814} + scale: {x: 1, y: 1, z: 1} + - name: joint10 + parentName: joint9 + position: {x: -0.3605551, y: 1.7694057e-15, z: 0.12} + rotation: {x: 0, y: -0, z: -0.008770918, w: 0.99996156} + scale: {x: 1, y: 1, z: 1} + - name: joint11 + parentName: joint10 + position: {x: -0.09154348, y: 0.019814016, z: 0.029994646} + rotation: {x: 0.042868063, y: 0.15011244, z: -0.04303352, w: 0.98680127} + scale: {x: 1, y: 1, z: 1} + - name: joint55 + parentName: joint11 + position: {x: -0.07399605, y: -2.3793767e-16, z: 6.106226e-17} + rotation: {x: 2.4673294e-32, y: -0.041632812, z: 3.11171e-15, w: 0.999133} + scale: {x: 1, y: 1, z: 1} + - name: joint56 + parentName: joint55 + position: {x: -0.07600566, y: -3.5527135e-16, z: 7.494005e-17} + rotation: {x: 1.2037062e-35, y: 0.000091424394, z: 1.846548e-15, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: joint57 + parentName: joint56 + position: {x: -0.09619879, y: -3.5527135e-16, z: 1.4177547e-14} + rotation: {x: 0, y: -0.114946574, z: -0, w: 0.99337167} + scale: {x: 1, y: 1, z: 1} + - name: joint12 + parentName: joint10 + position: {x: -0.02598065, y: 0.002883614, z: 0.12321674} + rotation: {x: 0.11304527, y: 0.69661635, z: -0.1134862, w: 0.6993335} + scale: {x: 1, y: 1, z: 1} + - name: joint58 + parentName: joint12 + position: {x: -0.089162126, y: -2.6873932e-17, z: -7.0950186e-17} + rotation: {x: 4.0062108e-32, y: -0.011748499, z: 4.0486117e-15, w: 0.999931} + scale: {x: 1, y: 1, z: 1} + - name: joint59 + parentName: joint58 + position: {x: -0.084438324, y: -3.5527135e-16, z: -7.6327826e-17} + rotation: {x: -0, y: 0.035413247, z: 2.4711546e-31, w: 0.9993728} + scale: {x: 1, y: 1, z: 1} + - name: joint60 + parentName: joint59 + position: {x: -0.07985701, y: 3.5527135e-16, z: 5.481726e-17} + rotation: {x: 0, y: -0.021723738, z: -0, w: 0.999764} + scale: {x: 1, y: 1, z: 1} + - name: joint61 + parentName: joint60 + position: {x: -0.07746912, y: 3.6404822e-32, z: 1.3682925e-17} + rotation: {x: -9.244807e-33, y: -0.0086197285, z: 2.6484999e-15, w: 0.99996287} + scale: {x: 1, y: 1, z: 1} + - name: joint62 + parentName: joint61 + position: {x: -0.06707279, y: -3.5527135e-16, z: -2.6732087e-16} + rotation: {x: 0, y: -0.70098543, z: -0, w: 0.7131756} + scale: {x: 1, y: 1, z: 1} + - name: joint14 + parentName: joint7 + position: {x: 2.1745936e-14, y: 0.10756256, z: 0.05387839} + rotation: {x: -0.010158825, y: 0.7070338, z: -0.010158825, w: 0.7070338} + scale: {x: 1, y: 1, z: 1} + - name: joint36 + parentName: joint14 + position: {x: -0.12709719, y: 1.8735012e-17, z: -4.3096858e-17} + rotation: {x: 0.0084946025, y: -0.59120727, z: 0.011586421, w: 0.8063917} + scale: {x: 1, y: 1, z: 1} + - name: joint37 + parentName: joint36 + position: {x: -0.103054576, y: 6.805027e-17, z: -1.6653344e-17} + rotation: {x: 0.015911022, y: 0.10465568, z: 0.14946043, w: 0.9830848} + scale: {x: 1, y: 1, z: 1} + - name: joint38 + parentName: joint37 + position: {x: -0.09580189, y: -2.698401e-32, z: 4.9960035e-17} + rotation: {x: 0, y: 0.018015133, z: 2.3763304e-15, w: 0.99983776} + scale: {x: 1, y: 1, z: 1} + - name: joint39 + parentName: joint38 + position: {x: -0.07476424, y: 2.2383038e-32, z: 1.3877786e-16} + rotation: {x: 0, y: -0.020644465, z: 2.7901835e-15, w: 0.9997869} + scale: {x: 1, y: 1, z: 1} + - name: joint40 + parentName: joint39 + position: {x: -0.063678086, y: -1.1047273e-32, z: -4.9960035e-17} + rotation: {x: 0, y: -0.25340134, z: -0, w: 0.9673612} + scale: {x: 1, y: 1, z: 1} + - name: joint41 + parentName: joint36 + position: {x: -0.079592906, y: -0.031094465, z: 0.08634962} + rotation: {x: 0.058944978, y: 0.38568294, z: 0.13910499, w: 0.910178} + scale: {x: 1, y: 1, z: 1} + - name: joint42 + parentName: joint41 + position: {x: -0.09347624, y: 3.5527135e-16, z: -1.11022296e-17} + rotation: {x: 6.163813e-33, y: 0.016476804, z: -5.6360446e-15, w: 0.9998643} + scale: {x: 1, y: 1, z: 1} + - name: joint43 + parentName: joint42 + position: {x: -0.09456621, y: 3.5527135e-16, z: 4.052314e-16} + rotation: {x: 0, y: -0.010380103, z: 4.6311506e-31, w: 0.9999461} + scale: {x: 1, y: 1, z: 1} + - name: joint44 + parentName: joint43 + position: {x: -0.08517358, y: -3.5527135e-16, z: -3.38618e-16} + rotation: {x: -6.163644e-33, y: -0.014716563, z: -2.9486684e-15, w: 0.9998917} + scale: {x: 1, y: 1, z: 1} + - name: joint45 + parentName: joint44 + position: {x: -0.0602492, y: -3.5527135e-16, z: -1.6653344e-17} + rotation: {x: 0, y: -0.38221022, z: -0, w: 0.9240754} + scale: {x: 1, y: 1, z: 1} + - name: joint46 + parentName: joint36 + position: {x: 0.08440523, y: -0.0000041314647, z: 0.059126962} + rotation: {x: 0.90607345, y: -0.13775223, z: 0.39552408, w: -0.06013235} + scale: {x: 1, y: 1, z: 1} + - name: joint47 + parentName: joint46 + position: {x: 0.095801786, y: -0.0000018860757, z: 0.000000035000777} + rotation: {x: 0.000000007449372, y: 0.018015133, z: -1.342239e-10, w: 0.99983776} + scale: {x: 1, y: 1, z: 1} + - name: joint48 + parentName: joint47 + position: {x: 0.074762255, y: -0.000004752052, z: -0.00000015192765} + rotation: {x: -1.5410725e-33, y: -0.020644465, z: -6.7321623e-16, w: 0.9997869} + scale: {x: 1, y: 1, z: 1} + - name: joint49 + parentName: joint48 + position: {x: 0.06367956, y: 0.000005259358, z: 0.00000011133796} + rotation: {x: 0.0000000072074027, y: -0.25340134, z: 0.000000001887986, w: 0.9673612} + scale: {x: 1, y: 1, z: 1} + - name: joint50 + parentName: joint36 + position: {x: 0.015646856, y: -0.031094128, z: 0.116388924} + rotation: {x: 0.7520093, y: -0.114931636, z: 0.64160526, w: -0.09805829} + scale: {x: 1, y: 1, z: 1} + - name: joint51 + parentName: joint50 + position: {x: 0.093476094, y: -0.00000027094217, z: 1.1657341e-16} + rotation: {x: 0.000000014899139, y: 0.016476804, z: -2.4552385e-10, w: 0.9998643} + scale: {x: 1, y: 1, z: 1} + - name: joint52 + parentName: joint51 + position: {x: 0.094566934, y: -0.00000077767515, z: -0.00000019630028} + rotation: {x: 0.000000018249137, y: -0.010380103, z: 4.9878895e-10, w: 0.9999461} + scale: {x: 1, y: 1, z: 1} + - name: joint53 + parentName: joint52 + position: {x: 0.0851739, y: 0.0000014720804, z: -0.0000002482385} + rotation: {x: 0.0000000333164, y: -0.014716563, z: 0.0000000017751464, w: 0.9998917} + scale: {x: 1, y: 1, z: 1} + - name: joint54 + parentName: joint53 + position: {x: 0.06024818, y: -0.000002909202, z: 0.0000007170761} + rotation: {x: 0.000000060805775, y: -0.38221022, z: 0.00000007690883, w: 0.9240754} + scale: {x: 1, y: 1, z: 1} + - name: joint63 + parentName: joint7 + position: {x: 0.24, y: -0.12999998, z: 0.049999997} + rotation: {x: 0.9995297, y: -0.030665986, z: -0.000000027658864, w: -0.000000056634818} + scale: {x: 1, y: 1, z: 1} + - name: joint64 + parentName: joint63 + position: {x: 0.38948682, y: -7.105427e-16, z: 0} + rotation: {x: 0.0030285215, y: -0.12718093, z: -0.042866964, w: 0.99094814} + scale: {x: 1, y: 1, z: 1} + - name: joint65 + parentName: joint64 + position: {x: 0.3605551, y: 3.5527135e-16, z: -0.12} + rotation: {x: -6.018763e-36, y: -1.023699e-17, z: -0.008770918, w: 0.99996156} + scale: {x: 1, y: 1, z: 1} + - name: joint66 + parentName: joint65 + position: {x: 0.0915416, y: -0.019814832, z: -0.0299946} + rotation: {x: 0.042868063, y: 0.15011244, z: -0.04303352, w: 0.98680127} + scale: {x: 1, y: 1, z: 1} + - name: joint67 + parentName: joint66 + position: {x: 0.07399491, y: 0.00000049746126, z: -0.00000055409134} + rotation: {x: -1.34932085e-33, y: -0.041632812, z: -5.729555e-17, w: 0.999133} + scale: {x: 1, y: 1, z: 1} + - name: joint68 + parentName: joint67 + position: {x: 0.07600958, y: 0.000003547689, z: 0.0000006672846} + rotation: {x: 0.000000010536712, y: 0.000091424394, z: -9.633645e-13, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: joint69 + parentName: joint68 + position: {x: 0.09619899, y: -0.000003590403, z: 0.000000386133} + rotation: {x: 0.0000000074011957, y: -0.114946574, z: 8.5641866e-10, w: 0.99337167} + scale: {x: 1, y: 1, z: 1} + - name: joint70 + parentName: joint65 + position: {x: 0.025980322, y: -0.0028836806, z: -0.123216994} + rotation: {x: 0.11304527, y: 0.69661635, z: -0.1134862, w: 0.6993335} + scale: {x: 1, y: 1, z: 1} + - name: joint71 + parentName: joint70 + position: {x: 0.08916167, y: 3.5527135e-16, z: -0.00000009384617} + rotation: {x: 3.0817006e-33, y: -0.011748499, z: 6.011787e-16, w: 0.999931} + scale: {x: 1, y: 1, z: 1} + - name: joint72 + parentName: joint71 + position: {x: 0.08443868, y: 0, z: 0.00000047927216} + rotation: {x: 1.8500533e-32, y: 0.035413247, z: -1.0704252e-15, w: 0.9993728} + scale: {x: 1, y: 1, z: 1} + - name: joint73 + parentName: joint72 + position: {x: 0.07985737, y: 3.5527135e-16, z: -0.00000021718611} + rotation: {x: -2.8895768e-34, y: -0.021723738, z: -4.501632e-17, w: 0.999764} + scale: {x: 1, y: 1, z: 1} + - name: joint74 + parentName: joint73 + position: {x: 0.07746899, y: -3.5527135e-16, z: 1.7763567e-16} + rotation: {x: 0.000000007450304, y: -0.0086197285, z: 6.422235e-11, w: 0.99996287} + scale: {x: 1, y: 1, z: 1} + - name: joint75 + parentName: joint74 + position: {x: 0.06707196, y: 3.5527135e-16, z: -0.00000024134343} + rotation: {x: 1.858289e-28, y: -0.70098543, z: 3.3080845e-14, w: 0.7131756} + scale: {x: 1, y: 1, z: 1} + - name: joint24 + parentName: joint5 + position: {x: 0.09722659, y: -0.2517154, z: 1.1939972e-16} + rotation: {x: 1.6606968e-32, y: 2.451872e-16, z: 0.6701611, w: 0.74221563} + scale: {x: 1, y: 1, z: 1} + - name: joint25 + parentName: joint24 + position: {x: -0.16180955, y: -6.383782e-17, z: 5.889277e-17} + rotation: {x: 1.9260484e-34, y: 1.790631e-16, z: -0.011078293, w: 0.99993867} + scale: {x: 1, y: 1, z: 1} + - name: joint26 + parentName: joint25 + position: {x: -0.13129793, y: 3.4833245e-16, z: 4.7018346e-17} + rotation: {x: 2.3133648e-33, y: 1.6669616e-16, z: -0.044083342, w: 0.99902785} + scale: {x: 1, y: 1, z: 1} + - name: joint27 + parentName: joint26 + position: {x: -0.13695669, y: 6.383782e-17, z: 4.5615924e-17} + rotation: {x: 3.009266e-36, y: 1.6660854e-16, z: 0.000248973, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: joint28 + parentName: joint27 + position: {x: -0.1380393, y: -3.5256517e-14, z: 4.5997046e-17} + rotation: {x: -3.852802e-34, y: 1.7309154e-16, z: 0.022107998, w: 0.9997556} + scale: {x: 1, y: 1, z: 1} + - name: joint29 + parentName: joint28 + position: {x: -0.11609105, y: -2.9906632e-16, z: 4.0178935e-17} + rotation: {x: 3.8526864e-34, y: 1.788129e-16, z: 0.020704908, w: 0.99978566} + scale: {x: 1, y: 1, z: 1} + - name: joint30 + parentName: joint29 + position: {x: -0.095484726, y: -2.9178048e-16, z: 3.414048e-17} + rotation: {x: 1.9264165e-33, y: 1.7259104e-16, z: -0.022469074, w: 0.9997476} + scale: {x: 1, y: 1, z: 1} + - name: joint31 + parentName: joint30 + position: {x: -0.09765373, y: -2.2308542e-16, z: 3.3699805e-17} + rotation: {x: 7.706731e-34, y: 1.803109e-16, z: 0.027953194, w: 0.99960923} + scale: {x: 1, y: 1, z: 1} + - name: joint32 + parentName: joint31 + position: {x: -0.09659968, y: -3.247402e-16, z: 3.482234e-17} + rotation: {x: -9.629728e-35, y: 1.7916718e-16, z: -0.0040298384, w: 0.9999919} + scale: {x: 1, y: 1, z: 1} + - name: joint33 + parentName: joint32 + position: {x: -0.08464015, y: 5.2458037e-16, z: 3.032923e-17} + rotation: {x: 9.629959e-35, y: 1.8129451e-16, z: 0.0080035, w: 0.999968} + scale: {x: 1, y: 1, z: 1} + - name: joint34 + parentName: joint33 + position: {x: -0.07817147, y: -4.5033417e-16, z: 2.8343208e-17} + rotation: {x: -3.854454e-34, y: 1.7129895e-16, z: -0.036680747, w: 0.99932706} + scale: {x: 1, y: 1, z: 1} + - name: joint35 + parentName: joint34 + position: {x: -0.06837516, y: -1.3392065e-16, z: 2.3409425e-17} + rotation: {x: -0.50787055, y: 0.49200353, z: -0.49200353, w: 0.50787055} + scale: {x: 1, y: 1, z: 1} + - name: joint20 + parentName: joint1 + position: {x: 0.13999999, y: 0, z: 0} + rotation: {x: 0.71773577, y: -0.69631565, z: 4.2637038e-17, w: -4.3948642e-17} + scale: {x: 1, y: 1, z: 1} + - name: joint21 + parentName: joint20 + position: {x: 0.66030294, y: 8.8817837e-17, z: 0.03} + rotation: {x: 0.9997244, y: 0.023477284, z: -1.4375691e-18, w: -6.121546e-17} + scale: {x: 1, y: 1, z: 1} + - name: joint22 + parentName: joint21 + position: {x: 0.5100958, y: -0.0014997916, z: -0.06} + rotation: {x: 0.7011903, y: 0.7129742, z: -6.910292e-17, w: 1.5759052e-16} + scale: {x: 1, y: 1, z: 1} + - name: joint23 + parentName: joint22 + position: {x: 0.03, y: 0.10484869, z: -0.24} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 10 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 1 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 3 + humanoidOversampling: 1 + avatarSetup: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs.meta new file mode 100644 index 00000000..69e2f094 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6d65e63468c2542c684d7e441b40f6c8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBamboo.asset b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBamboo.asset new file mode 100644 index 00000000..9dea6b17 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBamboo.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: SnakeBamboo + m_EditorClassIdentifier: + dynamicFriction: 0.2 + staticFriction: 0 + stickiness: 0 + stickDistance: 0 + frictionCombine: 3 + stickinessCombine: 3 + rollingContacts: 0 + rollingFriction: 0 diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBamboo.asset.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBamboo.asset.meta new file mode 100644 index 00000000..6917eead --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBamboo.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4c46db05afff546f8a9f9333946e9882 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBody.asset b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBody.asset new file mode 100644 index 00000000..0411fa0f --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBody.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: SnakeBody + m_EditorClassIdentifier: + dynamicFriction: 0.2 + staticFriction: 0 + stickiness: 0.01 + stickDistance: 0.01 + frictionCombine: 3 + stickinessCombine: 3 + rollingContacts: 0 + rollingFriction: 0 diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBody.asset.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBody.asset.meta new file mode 100644 index 00000000..5c826115 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBody.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dbf5bc78c024b4724bd8b2aaca1af0c2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeFloor.asset b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeFloor.asset new file mode 100644 index 00000000..7f15628a --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeFloor.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: SnakeFloor + m_EditorClassIdentifier: + dynamicFriction: 1.2 + staticFriction: 0 + stickiness: 0 + stickDistance: 0 + frictionCombine: 3 + stickinessCombine: 3 + rollingContacts: 0 + rollingFriction: 0 diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeFloor.asset.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeFloor.asset.meta new file mode 100644 index 00000000..0fa3990c --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeFloor.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c73079cca10924a80871331c66b4ad4b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePeg.prefab b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePeg.prefab new file mode 100644 index 00000000..f3f23299 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePeg.prefab @@ -0,0 +1,202 @@ +%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} + 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_RootOrder: 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: 2 + m_Mass: 5 + m_Drag: 0 + m_AngularDrag: 0.05 + 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_IsTrigger: 0 + m_Enabled: 1 + 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} + 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_RootOrder: 0 + 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_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_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePeg.prefab.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePeg.prefab.meta new file mode 100644 index 00000000..2b57782d --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePeg.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePegSlot.prefab b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePegSlot.prefab new file mode 100644 index 00000000..b42902f2 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePegSlot.prefab @@ -0,0 +1,100 @@ +%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} + 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_RootOrder: 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_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_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/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePegSlot.prefab.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePegSlot.prefab.meta new file mode 100644 index 00000000..ca1021a2 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePegSlot.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: aa6b142bbb2bb4887bebe33010c84c6c +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/WrapPeg.prefab b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/WrapPeg.prefab new file mode 100644 index 00000000..9c685aae --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/WrapPeg.prefab @@ -0,0 +1,134 @@ +%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: 3512526509595786580} + - component: {fileID: 3512526509595786539} + - component: {fileID: 3433872735350211203} + m_Layer: 0 + m_Name: WrapPeg + 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} + 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: + 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_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 03019be2b7a654429bf322c3ca0c7a0e, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!136 &3512526509595786580 +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_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5000001 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697} +--- !u!114 &3512526509595786539 +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: -65535 + m_SourceCollider: {fileID: 3512526509595786580} + m_DistanceField: {fileID: 0} +--- !u!114 &3433872735350211203 +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: 39f0f8f454a2049f3af7bad3dda0481e, type: 3} + m_Name: + m_EditorClassIdentifier: + normalColor: {r: 0.18178178, g: 0.8962264, b: 0.35300422, a: 1} + wrappedColor: {r: 1, g: 1, b: 0.21226418, a: 1} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/WrapPeg.prefab.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/WrapPeg.prefab.meta new file mode 100644 index 00000000..e4fe13d3 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/WrapPeg.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 88eb4cec0c7324e51bf5e7e1342370e3 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts.meta new file mode 100644 index 00000000..0d3d741b --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3bfafe4a7962d422083d44fc9934852e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CharacterControl2D.cs b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CharacterControl2D.cs new file mode 100644 index 00000000..4d73f3a5 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CharacterControl2D.cs @@ -0,0 +1,33 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +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(); + } + + private void Update() + { + unityRigidbody.AddForce(new Vector3(Input.GetAxis("Horizontal") * acceleration, 0, 0)); + + bool grounded = Physics.Raycast(new Ray(transform.position, -Vector3.up), floorRaycastDistance); + + if (Input.GetButtonDown("Jump") && grounded) + { + unityRigidbody.AddForce(Vector3.up * jumpPower, ForceMode.VelocityChange); + } + } + + void FixedUpdate () { + unityRigidbody.velocity = Vector3.ClampMagnitude(unityRigidbody.velocity,maxSpeed); + } +} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CharacterControl2D.cs.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CharacterControl2D.cs.meta new file mode 100644 index 00000000..e5c889d7 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CharacterControl2D.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 82b0f164ac14247fd8a566109fbbe771 +labels: +- ObiRope +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CraneController.cs b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CraneController.cs new file mode 100644 index 00000000..4e305746 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CraneController.cs @@ -0,0 +1,37 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Obi; + +public class CraneController : MonoBehaviour { + + 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(-speed * Time.deltaTime); + } + + if (Input.GetKey(KeyCode.S)){ + cursor.ChangeLength(speed * Time.deltaTime); + } + + if (Input.GetKey(KeyCode.A)){ + transform.Rotate(0,Time.deltaTime*15f,0); + } + + if (Input.GetKey(KeyCode.D)){ + transform.Rotate(0,-Time.deltaTime*15f,0); + } + } +} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CraneController.cs.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CraneController.cs.meta new file mode 100644 index 00000000..32e4eeb6 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CraneController.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5551d37f45fd044ff8768019501c20a5 +labels: +- ObiRope +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CursorController.cs b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CursorController.cs new file mode 100644 index 00000000..8c10c8e7 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CursorController.cs @@ -0,0 +1,49 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Obi; + +[RequireComponent(typeof(ObiRope))] +public class CursorController : MonoBehaviour +{ + public float minLength = 0.1f; + public float speed = 1; + + private ObiRopeCursor cursor; + private ObiRope rope; + + void OnEnable () + { + rope = GetComponent(); + cursor = GetComponent(); + } + + void Update () + { + float change = 0; + + if (Input.GetKey(KeyCode.W) && cursor != null) + { + change -= speed * Time.deltaTime; + } + + 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/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CursorController.cs.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CursorController.cs.meta new file mode 100644 index 00000000..1ac89661 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CursorController.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 83c7e82b3aac04e408bc8bfe9027c983 +labels: +- ObiRope +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/ExtendableGrapplingHook.cs b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/ExtendableGrapplingHook.cs new file mode 100644 index 00000000..dc44543a --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/ExtendableGrapplingHook.cs @@ -0,0 +1,223 @@ +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. + * 95% of the code is the grappling hook logic (user input, scene raycasting, launching, attaching the hook, etc) and parameter setup, + * to show how to use Obi completely at runtime. This might not be practical for real-world scenarios, + * but illustrates how to do it. + * + * Note that the choice of using actual rope simulation for grapple dynamics is debatable. Usually + * a simple spring works better both in terms of performance and controllability. + * + * 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 +{ + + 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() + { + + // 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 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)) + { + // We actually hit something, so attach the hook! + StartCoroutine(AttachHook()); + } + + } + + 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) + { + 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; + } + } + + 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; + rope.GetComponent().enabled = true; + + // wait for the solver to load the rope, after the next physics step: + yield return new WaitForFixedUpdate(); + yield return null; + + // 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; + + // while the last particle hasn't reached the hit, extend the rope: + Vector3 origin; + Vector3 direction; + + while (true) + { + // calculate rope origin in solver space: + origin = solver.transform.InverseTransformPoint(rope.transform.position); + + // update direction and distance to hook point: + direction = 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; + } + + // 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, 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); + + 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)) + { + 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); + } + } + } +} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/ExtendableGrapplingHook.cs.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/ExtendableGrapplingHook.cs.meta new file mode 100644 index 00000000..3347fd18 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/ExtendableGrapplingHook.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b77478c97cefb4dec9cc85236f7c5fca +labels: +- ObiRope +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/GrapplingHook.cs b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/GrapplingHook.cs new file mode 100644 index 00000000..0587a463 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/GrapplingHook.cs @@ -0,0 +1,152 @@ +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. + * 95% of the code is the grappling hook logic (user input, scene raycasting, launching, attaching the hook, etc) and parameter setup, + * to show how to use Obi completely at runtime. This might not be practical for real-world scenarios, + * but illustrates how to do it. + * + * Note that the choice of using actual rope simulation for grapple dynamics is debatable. Usually + * a simple spring works better both in terms of performance and controllability. + * + * 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 +{ + + 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() + { + + // 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 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)) + { + // We actually hit something, so attach the hook! + StartCoroutine(AttachHook()); + } + + } + + 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)) + { + 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); + } + } + } +} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/GrapplingHook.cs.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/GrapplingHook.cs.meta new file mode 100644 index 00000000..f34f6918 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/GrapplingHook.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 94f9aa141b5964f9f91dadcc1919618c +labels: +- ObiRope +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/HosePump.cs b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/HosePump.cs new file mode 100644 index 00000000..fb885e7c --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/HosePump.cs @@ -0,0 +1,83 @@ +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() + { + rope = GetComponent(); + smoother = GetComponent(); + rope.OnSimulationStart += Rope_OnBeginStep; + } + void OnDisable() + { + rope.OnSimulationStart -= Rope_OnBeginStep; + } + + 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 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); + } + + // 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); + + var emission = waterEmitter.emission; + emission.rateOverTime = Mathf.Lerp(minEmitRate, maxEmitRate, sine); + } + } + + public void LateUpdate() + { + 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)); + } + } +} + diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/HosePump.cs.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/HosePump.cs.meta new file mode 100644 index 00000000..0cbb3fc8 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/HosePump.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d71cdcf242c9b44fb874af7b7d8fd2b9 +timeCreated: 1518879675 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeBetweenTwoPoints.cs b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeBetweenTwoPoints.cs new file mode 100644 index 00000000..0d798c4b --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeBetweenTwoPoints.cs @@ -0,0 +1,69 @@ +using UnityEngine; +using Obi; + +public class RopeBetweenTwoPoints : MonoBehaviour +{ + public Transform start; + public Transform end; + public ObiSolver solver; + + public bool fixedParticleCount = true; + public int numParticles = 5; + + void Start() + { + // Generate rope synchronously: + Generate(); + } + + 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); + + // Calculate control point positions and tangent vector: + Vector3 startPositionLS = transform.InverseTransformPoint(start.position); + Vector3 endPositionLS = transform.InverseTransformPoint(end.position); + Vector3 tangentLS = (endPositionLS - startPositionLS).normalized; + + // Create the blueprint: + var blueprint = ScriptableObject.CreateInstance(); + + // 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(); + + if (fixedParticleCount) + blueprint.resolution = numParticles / (blueprint.path.Length / blueprint.thickness); + + // Generate particles/constraints: + blueprint.GenerateImmediate(); + + // Add rope actor / renderer / attachment components: + var rope = gameObject.AddComponent(); + var ropeRenderer = gameObject.AddComponent(); + var attachment1 = gameObject.AddComponent(); + var attachment2 = gameObject.AddComponent(); + + // Load the default rope section for rendering: + ropeRenderer.section = Resources.Load("DefaultRopeSection"); + + // 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/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeBetweenTwoPoints.cs.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeBetweenTwoPoints.cs.meta new file mode 100644 index 00000000..fe82b541 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeBetweenTwoPoints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9eaa9e75d3f0a4e119decb19dce797be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeNet.cs b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeNet.cs new file mode 100644 index 00000000..a461ba31 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeNet.cs @@ -0,0 +1,128 @@ +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 +{ + 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() + { + // create an object containing both the solver and the updater: + GameObject solverObject = new GameObject("solver", typeof(ObiSolver)); + ObiSolver solver = solverObject.GetComponent(); + solver.substeps = 2; + + // 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); + } + + private void CreateNet(ObiSolver solver) + { + ObiCollider[,] nodes = new ObiCollider[resolution.x + 1, resolution.y + 1]; + + for (int x = 0; x <= resolution.x; ++x) + { + for (int y = 0; y <= resolution.y; ++y) + { + GameObject rb = GameObject.CreatePrimitive(PrimitiveType.Cube); + rb.transform.position = new Vector3(x, y, 0) * size; + rb.transform.localScale = new Vector3(nodeSize, nodeSize, nodeSize); + + rb.AddComponent(); + nodes[x, y] = rb.AddComponent(); + nodes[x, y].Filter = 1; + } + } + + 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 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 + 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) + { + var A = rope.gameObject.AddComponent(); + var B = rope.gameObject.AddComponent(); + + A.attachmentType = ObiParticleAttachment.AttachmentType.Dynamic; + B.attachmentType = ObiParticleAttachment.AttachmentType.Dynamic; + + A.target = bodyA.transform; + B.target = bodyB.transform; + + A.particleGroup = rope.ropeBlueprint.groups[0]; + B.particleGroup = rope.ropeBlueprint.groups[1]; + } + + // 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); + + // 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/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeNet.cs.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeNet.cs.meta new file mode 100644 index 00000000..9bc85116 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeNet.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 83e341aa1a9a14825ab84ad04cd5f44c +labels: +- ObiRope +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeSweepCut.cs b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeSweepCut.cs new file mode 100644 index 00000000..a251e7cd --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeSweepCut.cs @@ -0,0 +1,148 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Obi; + +[RequireComponent(typeof(ObiRope))] +public class RopeSweepCut : MonoBehaviour +{ + + public Camera cam; + + ObiRope rope; + LineRenderer lineRenderer; + Vector3 cutStartPosition; + Vector3 cutEndPosition; + bool cut; + + private void Awake() + { + rope = GetComponent(); + AddMouseLine(); + } + + private void OnDestroy() + { + 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; + } + + 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(); + } + + private void Rope_OnBeginSimulation(ObiActor actor, float stepTime, float substepTime) + { + if (cut) + { + ScreenSpaceCut(cutStartPosition, cutEndPosition); + cut = false; + } + } + + /** + * 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); + } +} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeSweepCut.cs.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeSweepCut.cs.meta new file mode 100644 index 00000000..ba9f07b7 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeSweepCut.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 88cb6f64c607f46b3b0d7a30a99ed18b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTenser.cs b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTenser.cs new file mode 100644 index 00000000..50312f40 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTenser.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class RopeTenser : MonoBehaviour +{ + public float force = 10; + + // Update is called once per frame + void Update() + { + GetComponent().AddForce(Vector3.down * force); + } +} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTenser.cs.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTenser.cs.meta new file mode 100644 index 00000000..6af8d62b --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTenser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6a01ab42f187a43818168cd1cd11d3cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTensionColorizer.cs b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTensionColorizer.cs new file mode 100644 index 00000000..a87977ab --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTensionColorizer.cs @@ -0,0 +1,58 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Obi; + +[RequireComponent(typeof(ObiRope))] +public class RopeTensionColorizer : MonoBehaviour +{ + 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() + { + rope = GetComponent(); + var rend = GetComponent(); + localMaterial = Instantiate(rend.material); + rend.material = localMaterial; + + } + + private void OnDestroy() + { + 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/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTensionColorizer.cs.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTensionColorizer.cs.meta new file mode 100644 index 00000000..c6f4f97c --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTensionColorizer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 51f5e34b2316b45c6bdf971b375b5f2e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SnakeController.cs b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SnakeController.cs new file mode 100644 index 00000000..fcab6402 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SnakeController.cs @@ -0,0 +1,124 @@ +using UnityEngine; +using Obi; + +public class SnakeController : MonoBehaviour +{ + 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() + { + rope = GetComponent(); + solver = rope.solver; + + // subscribe to solver events (to update surface information) + rope.OnSimulationStart += ResetSurfaceInfo; + solver.OnCollision += AnalyzeContacts; + solver.OnParticleCollision += AnalyzeContacts; + } + + + private void OnDestroy() + { + rope.OnSimulationStart -= ResetSurfaceInfo; + solver.OnCollision -= AnalyzeContacts; + solver.OnParticleCollision -= AnalyzeContacts; + } + + private void ResetSurfaceInfo(ObiActor a, float simulatedTime, float substepTime) + { + + if (traction == null) + { + traction = new float[rope.activeParticleCount]; + surfaceNormal = new Vector3[rope.activeParticleCount]; + } + + 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] / 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; + } + } + } + } +} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SnakeController.cs.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SnakeController.cs.meta new file mode 100644 index 00000000..1a173355 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SnakeController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e5d46d2f0b9f9496f9ed59231aa6982d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SpiralCurve.cs b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SpiralCurve.cs new file mode 100644 index 00000000..ae350d1b --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SpiralCurve.cs @@ -0,0 +1,50 @@ +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 () + { + Generate(); + } + + 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/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SpiralCurve.cs.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SpiralCurve.cs.meta new file mode 100644 index 00000000..2eb51c90 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SpiralCurve.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: e76488b5e11ef47ba9c0746db5c47115 +labels: +- ObiRope +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPeg.cs b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPeg.cs new file mode 100644 index 00000000..c403418c --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPeg.cs @@ -0,0 +1,86 @@ +using System.Collections; +using UnityEngine; +using Obi; + +[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.velocity; + + // 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; + } +} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPeg.cs.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPeg.cs.meta new file mode 100644 index 00000000..5e3431e2 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPegSlot.cs b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPegSlot.cs new file mode 100644 index 00000000..851a1f7c --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPegSlot.cs @@ -0,0 +1,32 @@ +using UnityEngine; + + +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/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPegSlot.cs.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPegSlot.cs.meta new file mode 100644 index 00000000..b4c1bbdf --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledRopesGameController.cs b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledRopesGameController.cs new file mode 100644 index 00000000..e010a97f --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledRopesGameController.cs @@ -0,0 +1,136 @@ +using UnityEngine; +using UnityEngine.Events; +using Obi; + +[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; + } +} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledRopesGameController.cs.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledRopesGameController.cs.meta new file mode 100644 index 00000000..3a556d54 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopeGameController.cs b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopeGameController.cs new file mode 100644 index 00000000..4a5508b8 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopeGameController.cs @@ -0,0 +1,72 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; +using Obi; + +[RequireComponent(typeof(ObiSolver))] +public class WrapRopeGameController : MonoBehaviour +{ + + ObiSolver solver; + + public Wrappable[] wrappables; + public UnityEvent onFinish = new UnityEvent(); + + private void Awake() + { + solver = GetComponent(); + } + + // Start is called before the first frame update + void OnEnable() + { + solver.OnCollision += Solver_OnCollision; + } + + private void OnDisable() + { + solver.OnCollision -= Solver_OnCollision; + } + + 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; + } + } + + if (allWrapped) + onFinish.Invoke(); + } + + 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) + { + // 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(); + } + } + } + } +} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopeGameController.cs.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopeGameController.cs.meta new file mode 100644 index 00000000..a1437745 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopeGameController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 92b1832c67f564e9fa43a180598111e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopePlayerController.cs b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopePlayerController.cs new file mode 100644 index 00000000..306142cf --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopePlayerController.cs @@ -0,0 +1,42 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +[RequireComponent(typeof(Rigidbody))] +public class WrapRopePlayerController : MonoBehaviour +{ + 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); + } + +} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopePlayerController.cs.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopePlayerController.cs.meta new file mode 100644 index 00000000..a819f0c7 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopePlayerController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fdf58ad80e1cd4860aa12e8da0aa833c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/Wrappable.cs b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/Wrappable.cs new file mode 100644 index 00000000..4ed95690 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/Wrappable.cs @@ -0,0 +1,41 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +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); + + Material localMaterial; + + public void Awake() + { + localMaterial = GetComponent().material; + } + + public void OnDestroy() + { + Destroy(localMaterial); + } + + public void Reset() + { + wrapped = false; + localMaterial.color = normalColor; + } + + public void SetWrapped() + { + wrapped = true; + localMaterial.color = wrappedColor; + } + + public bool IsWrapped() + { + return wrapped; + } + +} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/Wrappable.cs.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/Wrappable.cs.meta new file mode 100644 index 00000000..1982e779 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/Wrappable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 39f0f8f454a2049f3af7bad3dda0481e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures.meta new file mode 100644 index 00000000..01e9927f --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 538d3ea4a9f2b42c0b88206c340f4ab4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rod.png b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rod.png new file mode 100644 index 00000000..f33a031f Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rod.png differ diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rod.png.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rod.png.meta new file mode 100644 index 00000000..4dbd893f --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rod.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 49dd156e3b48f41f791e9d75107f6b38 +labels: +- ObiRope +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 10 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 1 + 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 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_NRM.png b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_NRM.png new file mode 100644 index 00000000..5979b81d Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_NRM.png differ diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_NRM.png.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_NRM.png.meta new file mode 100644 index 00000000..d7fc89aa --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_NRM.png.meta @@ -0,0 +1,90 @@ +fileFormatVersion: 2 +guid: 1020609c9ac9f4a14a078c1afd37a75e +labels: +- ObiRope +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 1 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_OCC.png b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_OCC.png new file mode 100644 index 00000000..cb35a1ec Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_OCC.png differ diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_OCC.png.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_OCC.png.meta new file mode 100644 index 00000000..fc28463d --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_OCC.png.meta @@ -0,0 +1,90 @@ +fileFormatVersion: 2 +guid: 665db389e8f1e42acb689114a261cb06 +labels: +- ObiRope +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_red.png b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_red.png new file mode 100644 index 00000000..f900cb95 Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_red.png differ diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_red.png.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_red.png.meta new file mode 100644 index 00000000..63234a1d --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_red.png.meta @@ -0,0 +1,134 @@ +fileFormatVersion: 2 +guid: 61461ee4d289a4bc384e839abcf74473 +labels: +- ObiRope +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + 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 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/cylinder_NRM.png b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/cylinder_NRM.png new file mode 100644 index 00000000..90ac43dc Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/cylinder_NRM.png differ diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/cylinder_NRM.png.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/cylinder_NRM.png.meta new file mode 100644 index 00000000..194c30a1 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/cylinder_NRM.png.meta @@ -0,0 +1,121 @@ +fileFormatVersion: 2 +guid: 7a6d7fa80b2a444089c9b87ba93966c7 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + 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 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark.png b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark.png new file mode 100644 index 00000000..bcb4cd98 Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark.png differ diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark.png.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark.png.meta new file mode 100644 index 00000000..75a808fc --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark.png.meta @@ -0,0 +1,98 @@ +fileFormatVersion: 2 +guid: 9c47de74aec0642928f43bb91a7346b7 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + 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: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark_n.png b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark_n.png new file mode 100644 index 00000000..a0ba5548 Binary files /dev/null and b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark_n.png differ diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark_n.png.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark_n.png.meta new file mode 100644 index 00000000..36079f24 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Samples/RopeAndRod/Snake.unity b/xiaofang/Assets/Obi/Samples/RopeAndRod/Snake.unity new file mode 100644 index 00000000..1768995d --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/Snake.unity @@ -0,0 +1,1729 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + 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: 258127860} +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!850595691 &258127860 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Settings.lighting + serializedVersion: 4 + 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_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_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 + m_PVRTiledBaking: 0 +--- !u!1 &283647873 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 283647877} + - component: {fileID: 283647876} + - component: {fileID: 283647875} + - component: {fileID: 283647874} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &283647874 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 283647873} + 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 &283647875 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 283647873} + 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 &283647876 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 283647873} + 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_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &283647877 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 283647873} + 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} + 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: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &421764872 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + 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_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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + 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: c73079cca10924a80871331c66b4ad4b, type: 2} + filter: -65535 + m_SourceCollider: {fileID: 506459882} + m_DistanceField: {fileID: 0} +--- !u!1 &667163001 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 667163002} + - component: {fileID: 667163005} + - component: {fileID: 667163004} + - component: {fileID: 667163003} + - component: {fileID: 667163006} + m_Layer: 0 + m_Name: Cylinder (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &667163002 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 667163001} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 667163001} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5000001 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697} +--- !u!23 &667163004 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 667163001} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &667163005 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 667163001} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &667163006 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 667163001} + 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: 4c46db05afff546f8a9f9333946e9882, type: 2} + filter: -65535 + m_SourceCollider: {fileID: 667163003} + m_DistanceField: {fileID: 0} +--- !u!1 &907464231 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 907464232} + m_Layer: 0 + m_Name: BambooStructure + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &907464232 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 907464231} + 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: + 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} + - component: {fileID: 1002464894} + 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!114 &1002464894 +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: 7118f3a432315464297cab517f322eca, type: 3} + m_Name: + m_EditorClassIdentifier: + target: {fileID: 1788698695} + extrapolation: 1 + smoothness: 0.995 + linearSpeed: 1 + rotationalSpeed: 1 + distanceFromTarget: 3 +--- !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_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 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} + 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!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: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.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_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1175446146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1195412986} + - component: {fileID: 1195412989} + - component: {fileID: 1195412988} + - component: {fileID: 1195412987} + - component: {fileID: 1195412990} + m_Layer: 0 + m_Name: Cylinder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1195412986 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1195412985} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1195412985} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5000001 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697} +--- !u!23 &1195412988 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1195412985} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1195412989 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1195412985} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &1195412990 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1195412985} + 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: 4c46db05afff546f8a9f9333946e9882, type: 2} + filter: -65535 + m_SourceCollider: {fileID: 1195412987} + m_DistanceField: {fileID: 0} +--- !u!1 &1298991846 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1298991847} + - component: {fileID: 1298991850} + - component: {fileID: 1298991849} + - component: {fileID: 1298991848} + - component: {fileID: 1298991851} + m_Layer: 0 + m_Name: Cylinder (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1298991847 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1298991846} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1298991846} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5000001 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697} +--- !u!23 &1298991849 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1298991846} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1298991850 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1298991846} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &1298991851 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1298991846} + 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: 4c46db05afff546f8a9f9333946e9882, type: 2} + filter: -65535 + m_SourceCollider: {fileID: 1298991848} + m_DistanceField: {fileID: 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: 1346965647} + m_Layer: 10 + m_Name: Snake + 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: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e000000 + m_AlignBytes: 16 + groupID: 1 + m_CollisionMaterial: {fileID: 11400000, guid: dbf5bc78c024b4724bd8b2aaca1af0c2, type: 2} + m_SurfaceCollisions: 0 + m_SelfCollisions: 1 + restLength_: 4.1143684 + elements: + - particle1: 0 + particle2: 1 + restLength: 0.1524441 + constraintForce: 0 + tearResistance: 1 + - particle1: 1 + particle2: 2 + restLength: 0.15290284 + constraintForce: 0 + tearResistance: 1 + - particle1: 2 + particle2: 3 + restLength: 0.15289813 + constraintForce: 0 + tearResistance: 1 + - particle1: 3 + particle2: 4 + restLength: 0.15299127 + constraintForce: 0 + tearResistance: 1 + - particle1: 4 + particle2: 5 + restLength: 0.1531161 + constraintForce: 0 + tearResistance: 1 + - particle1: 5 + particle2: 6 + restLength: 0.15290153 + constraintForce: 0 + tearResistance: 1 + - particle1: 6 + particle2: 7 + restLength: 0.16036844 + constraintForce: 0 + tearResistance: 1 + - particle1: 7 + particle2: 8 + restLength: 0.15998638 + constraintForce: 0 + tearResistance: 1 + - particle1: 8 + particle2: 9 + restLength: 0.15956938 + constraintForce: 0 + tearResistance: 1 + - particle1: 9 + particle2: 10 + restLength: 0.15977395 + constraintForce: 0 + tearResistance: 1 + - particle1: 10 + particle2: 11 + restLength: 0.16026509 + constraintForce: 0 + tearResistance: 1 + - particle1: 11 + particle2: 12 + restLength: 0.15994787 + constraintForce: 0 + tearResistance: 1 + - particle1: 12 + particle2: 13 + restLength: 0.15964794 + constraintForce: 0 + tearResistance: 1 + - particle1: 13 + particle2: 14 + restLength: 0.15938759 + constraintForce: 0 + tearResistance: 1 + - particle1: 14 + particle2: 15 + restLength: 0.16015792 + constraintForce: 0 + tearResistance: 1 + - particle1: 15 + particle2: 16 + restLength: 0.16017342 + constraintForce: 0 + tearResistance: 1 + - particle1: 16 + particle2: 17 + restLength: 0.16003728 + constraintForce: 0 + tearResistance: 1 + - particle1: 17 + particle2: 18 + restLength: 0.15995121 + constraintForce: 0 + tearResistance: 1 + - particle1: 18 + particle2: 19 + restLength: 0.15990973 + constraintForce: 0 + tearResistance: 1 + - particle1: 19 + particle2: 20 + restLength: 0.15987158 + constraintForce: 0 + tearResistance: 1 + - particle1: 20 + particle2: 21 + restLength: 0.1597457 + constraintForce: 0 + tearResistance: 1 + - particle1: 21 + particle2: 22 + restLength: 0.15932155 + constraintForce: 0 + tearResistance: 1 + - particle1: 22 + particle2: 23 + restLength: 0.1603353 + constraintForce: 0 + tearResistance: 1 + - particle1: 23 + particle2: 24 + restLength: 0.16002035 + constraintForce: 0 + tearResistance: 1 + - particle1: 24 + particle2: 25 + restLength: 0.16021276 + constraintForce: 0 + tearResistance: 1 + - particle1: 25 + particle2: 26 + 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 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0.005 + _maxBending: 0.04 + _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: 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!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: 2 + twist: 0 + indexInSystem: 0 +--- !u!114 &1346965647 +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: e5d46d2f0b9f9496f9ed59231aa6982d, type: 3} + m_Name: + m_EditorClassIdentifier: + headReferenceFrame: {fileID: 1002464896} + headSpeed: 20 + upSpeed: 40 + slitherSpeed: 120 +--- !u!4 &1346965650 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1346965641} + 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 &1660007473 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1660007474} + - component: {fileID: 1660007476} + - component: {fileID: 1660007475} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1660007474 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1660007473} + 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} + m_AnchoredPosition: {x: 108.20001, y: 39.100006} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1660007475 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1660007473} + 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: 16 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Use WASD to orient the head. Use Space to lift up the head. Press J to + accelerate. +--- !u!222 &1660007476 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1660007473} + m_CullTransparentMesh: 0 +--- !u!1 &1788698691 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1788698695} + - component: {fileID: 1788698694} + - component: {fileID: 1788698693} + - component: {fileID: 1788698692} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1788698692 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1788698691} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 93cd44c04a2944349b4fe311545b7e05, type: 3} + m_Name: + m_EditorClassIdentifier: + smoother: {fileID: 1346965646} + m: 0 +--- !u!23 &1788698693 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1788698691} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e78e1b735e05b4dee88b279cb6997001, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1788698694 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1788698691} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1788698695 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1788698691} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2086948286} + - component: {fileID: 2086948290} + - component: {fileID: 2086948289} + - component: {fileID: 2086948288} + - component: {fileID: 2086948287} + m_Layer: 0 + m_Name: Cylinder (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2086948286 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2086948285} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2086948285} + 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: 4c46db05afff546f8a9f9333946e9882, type: 2} + filter: -65535 + m_SourceCollider: {fileID: 2086948288} + m_DistanceField: {fileID: 0} +--- !u!136 &2086948288 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2086948285} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5000001 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697} +--- !u!23 &2086948289 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2086948285} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2086948290 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2086948285} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 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: 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 + colliderCCD: 1 + particleCCD: 0 + shockPropagation: 0 + surfaceCollisionIterations: 8 + surfaceCollisionTolerance: 0.005 + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + gravity: {x: 0, y: -5, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + maxFoamVelocityStretch: 0.3 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + 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: 3 + SORFactor: 1 + enabled: 0 + pinConstraintParameters: + evaluationOrder: 1 + iterations: 10 + SORFactor: 1 + enabled: 0 + 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} + 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} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/Snake.unity.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/Snake.unity.meta new file mode 100644 index 00000000..b6344c06 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/Snake.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 20d1d83e4d4bd45e09d7f7c50d3b48bd +labels: +- ObiRope +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SpringRod.unity b/xiaofang/Assets/Obi/Samples/RopeAndRod/SpringRod.unity new file mode 100644 index 00000000..7a437052 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SpringRod.unity @@ -0,0 +1,1327 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + 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: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &421764872 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + 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_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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + 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 &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_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 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} + 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!1 &1105384629 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1105384642} + - component: {fileID: 1105384643} + - component: {fileID: 1105384633} + - component: {fileID: 1105384632} + - component: {fileID: 1105384631} + - component: {fileID: 1105384635} + - component: {fileID: 1105384636} + m_Layer: 0 + m_Name: Obi Rod + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1105384631 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1105384629} + m_Enabled: 1 + m_EditorHideFlags: 0 + 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 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 0.8 +--- !u!114 &1105384632 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1105384629} + 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 &1105384633 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1105384629} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8f2bc32c4faf04f039a86a6e3cea12a1, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a000000 + m_AlignBytes: 16 + groupID: 1 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_SelfCollisions: 0 + restLength_: 16.384266 + elements: + - particle1: 0 + particle2: 1 + restLength: 0.28248742 + constraintForce: 0 + tearResistance: 0 + - particle1: 1 + particle2: 2 + restLength: 0.28248742 + constraintForce: 0 + tearResistance: 0 + - particle1: 2 + particle2: 3 + restLength: 0.28248745 + constraintForce: 0 + tearResistance: 0 + - particle1: 3 + particle2: 4 + restLength: 0.28248745 + constraintForce: 0 + tearResistance: 0 + - particle1: 4 + particle2: 5 + restLength: 0.28248742 + constraintForce: 0 + tearResistance: 0 + - particle1: 5 + particle2: 6 + restLength: 0.28248748 + constraintForce: 0 + tearResistance: 0 + - particle1: 6 + particle2: 7 + restLength: 0.28248745 + constraintForce: 0 + tearResistance: 0 + - particle1: 7 + particle2: 8 + restLength: 0.28248742 + constraintForce: 0 + tearResistance: 0 + - particle1: 8 + particle2: 9 + restLength: 0.28248745 + constraintForce: 0 + tearResistance: 0 + - particle1: 9 + particle2: 10 + restLength: 0.28248742 + constraintForce: 0 + tearResistance: 0 + - particle1: 10 + particle2: 11 + restLength: 0.28248778 + constraintForce: 0 + tearResistance: 0 + - particle1: 11 + particle2: 12 + restLength: 0.28248727 + constraintForce: 0 + tearResistance: 0 + - particle1: 12 + particle2: 13 + restLength: 0.28248748 + constraintForce: 0 + tearResistance: 0 + - particle1: 13 + particle2: 14 + restLength: 0.28248754 + constraintForce: 0 + tearResistance: 0 + - particle1: 14 + particle2: 15 + restLength: 0.28248778 + constraintForce: 0 + tearResistance: 0 + - particle1: 15 + particle2: 16 + restLength: 0.28248724 + constraintForce: 0 + tearResistance: 0 + - particle1: 16 + particle2: 17 + restLength: 0.2824875 + constraintForce: 0 + tearResistance: 0 + - particle1: 17 + particle2: 18 + restLength: 0.2824875 + constraintForce: 0 + tearResistance: 0 + - particle1: 18 + particle2: 19 + restLength: 0.2824875 + constraintForce: 0 + tearResistance: 0 + - particle1: 19 + particle2: 20 + restLength: 0.2824875 + constraintForce: 0 + tearResistance: 0 + - particle1: 20 + particle2: 21 + restLength: 0.2824875 + constraintForce: 0 + tearResistance: 0 + - particle1: 21 + particle2: 22 + restLength: 0.28248748 + constraintForce: 0 + tearResistance: 0 + - particle1: 22 + particle2: 23 + restLength: 0.2824875 + constraintForce: 0 + tearResistance: 0 + - particle1: 23 + particle2: 24 + restLength: 0.28248754 + constraintForce: 0 + tearResistance: 0 + - particle1: 24 + particle2: 25 + restLength: 0.2824875 + constraintForce: 0 + tearResistance: 0 + - particle1: 25 + particle2: 26 + restLength: 0.2824875 + constraintForce: 0 + tearResistance: 0 + - particle1: 26 + particle2: 27 + restLength: 0.28248748 + constraintForce: 0 + tearResistance: 0 + - particle1: 27 + particle2: 28 + restLength: 0.2824875 + constraintForce: 0 + tearResistance: 0 + - particle1: 28 + particle2: 29 + restLength: 0.28248698 + constraintForce: 0 + tearResistance: 0 + - particle1: 29 + particle2: 30 + restLength: 0.28248748 + constraintForce: 0 + tearResistance: 0 + - particle1: 30 + particle2: 31 + restLength: 0.28248855 + constraintForce: 0 + tearResistance: 0 + - particle1: 31 + particle2: 32 + restLength: 0.28248698 + constraintForce: 0 + tearResistance: 0 + - particle1: 32 + particle2: 33 + restLength: 0.28248754 + constraintForce: 0 + tearResistance: 0 + - particle1: 33 + particle2: 34 + restLength: 0.2824875 + constraintForce: 0 + tearResistance: 0 + - particle1: 34 + particle2: 35 + restLength: 0.28248748 + constraintForce: 0 + tearResistance: 0 + - particle1: 35 + particle2: 36 + restLength: 0.28248748 + constraintForce: 0 + tearResistance: 0 + - particle1: 36 + particle2: 37 + restLength: 0.28248644 + constraintForce: 0 + tearResistance: 0 + - particle1: 37 + particle2: 38 + restLength: 0.28248855 + constraintForce: 0 + tearResistance: 0 + - particle1: 38 + particle2: 39 + restLength: 0.2824872 + constraintForce: 0 + tearResistance: 0 + - particle1: 39 + particle2: 40 + restLength: 0.28248718 + constraintForce: 0 + tearResistance: 0 + - particle1: 40 + particle2: 41 + restLength: 0.2824872 + constraintForce: 0 + tearResistance: 0 + - particle1: 41 + particle2: 42 + restLength: 0.2824872 + constraintForce: 0 + tearResistance: 0 + - particle1: 42 + particle2: 43 + restLength: 0.28248718 + constraintForce: 0 + tearResistance: 0 + - particle1: 43 + particle2: 44 + restLength: 0.2824872 + constraintForce: 0 + tearResistance: 0 + - particle1: 44 + particle2: 45 + restLength: 0.28248718 + constraintForce: 0 + tearResistance: 0 + - particle1: 45 + particle2: 46 + restLength: 0.28248718 + constraintForce: 0 + tearResistance: 0 + - particle1: 46 + particle2: 47 + restLength: 0.28248823 + constraintForce: 0 + tearResistance: 0 + - particle1: 47 + particle2: 48 + restLength: 0.2824861 + constraintForce: 0 + tearResistance: 0 + - particle1: 48 + particle2: 49 + restLength: 0.28248614 + constraintForce: 0 + tearResistance: 0 + - particle1: 49 + particle2: 50 + restLength: 0.28248826 + constraintForce: 0 + tearResistance: 0 + - particle1: 50 + particle2: 51 + restLength: 0.28248715 + constraintForce: 0 + tearResistance: 0 + - particle1: 51 + particle2: 52 + restLength: 0.2824872 + constraintForce: 0 + tearResistance: 0 + - particle1: 52 + particle2: 53 + restLength: 0.2824872 + constraintForce: 0 + tearResistance: 0 + - particle1: 53 + particle2: 54 + restLength: 0.2824872 + constraintForce: 0 + tearResistance: 0 + - particle1: 54 + particle2: 55 + restLength: 0.28248718 + constraintForce: 0 + tearResistance: 0 + - particle1: 55 + particle2: 56 + restLength: 0.28248718 + constraintForce: 0 + tearResistance: 0 + - particle1: 56 + particle2: 57 + restLength: 0.2824872 + constraintForce: 0 + tearResistance: 0 + - particle1: 57 + particle2: 58 + 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 + _shear1Compliance: 0 + _shear2Compliance: 0 + _bendTwistConstraintsEnabled: 1 + _torsionCompliance: 0 + _bend1Compliance: 0 + _bend2Compliance: 0 + _plasticYield: 0 + _plasticCreep: 0 + _chainConstraintsEnabled: 1 + _tightness: 1 +--- !u!114 &1105384635 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1105384629} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1105384633} + m_Target: {fileID: 1105384642} + m_ParticleGroup: {fileID: 9190015862606898100, guid: b74d67cfe23804ec1b4f215ac5e3d500, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 1 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1105384636 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1105384629} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1105384633} + m_Target: {fileID: 2086275157} + m_ParticleGroup: {fileID: -4518859148014644581, guid: b74d67cfe23804ec1b4f215ac5e3d500, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 1 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!4 &1105384642 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1105384629} + 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: 5 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1105384629} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: f1d1c5155bab2402a9c25e0867b791ef, type: 2} + m_CullingMode: 0 + m_UpdateMode: 1 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 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: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.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_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1175446146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175446144} + 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 &1797933355 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1797933357} + - component: {fileID: 1797933356} + m_Layer: 0 + m_Name: BurstCollisionWorld + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1797933356 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797933355} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} + m_Name: + m_EditorClassIdentifier: + cellSpans: + m_AlignBytes: 16 +--- !u!4 &1797933357 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797933355} + 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 &2086275150 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2086275157} + - component: {fileID: 2086275156} + - component: {fileID: 2086275155} + - component: {fileID: 2086275154} + - component: {fileID: 2086275153} + - component: {fileID: 2086275152} + - component: {fileID: 2086275151} + m_Layer: 0 + m_Name: Load + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2086275151 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2086275150} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!114 &2086275152 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2086275150} + 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: 2086275154} + m_DistanceField: {fileID: 0} +--- !u!54 &2086275153 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2086275150} + serializedVersion: 2 + m_Mass: 0.25 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!65 &2086275154 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2086275150} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2086275155 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2086275150} + 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: 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: 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 &2086275156 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2086275150} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &2086275157 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2086275150} + 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!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: 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 + colliderCCD: 1 + particleCCD: 0 + shockPropagation: 0 + surfaceCollisionIterations: 8 + surfaceCollisionTolerance: 0.005 + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 6 + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + maxFoamVelocityStretch: 0.3 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + worldLinearInertiaScale: 0 + worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 + distanceConstraintParameters: + evaluationOrder: 0 + iterations: 8 + SORFactor: 1 + enabled: 0 + bendingConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 0 + particleCollisionConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 0 + particleFrictionConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 0 + collisionConstraintParameters: + evaluationOrder: 1 + iterations: 4 + SORFactor: 1 + enabled: 0 + frictionConstraintParameters: + evaluationOrder: 1 + iterations: 3 + SORFactor: 1 + enabled: 0 + 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: 5 + 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: 5 + SORFactor: 1 + enabled: 1 + bendTwistConstraintParameters: + evaluationOrder: 0 + iterations: 5 + SORFactor: 1 + enabled: 1 + chainConstraintParameters: + evaluationOrder: 0 + iterations: 3 + SORFactor: 1 + enabled: 1 +--- !u!4 &2102841797 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102841794} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2147243670} + - component: {fileID: 2147243673} + - component: {fileID: 2147243672} + - component: {fileID: 2147243671} + m_Layer: 0 + m_Name: Cylinder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2147243670 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2147243669} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2147243669} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5000001 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697} +--- !u!23 &2147243672 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2147243669} + 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: 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: 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 &2147243673 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2147243669} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SpringRod.unity.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SpringRod.unity.meta new file mode 100644 index 00000000..fa309c5d --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SpringRod.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 62deeda7ebac34fb1aa15a197b4edb8e +labels: +- ObiRope +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SpringRodSettings.lighting b/xiaofang/Assets/Obi/Samples/RopeAndRod/SpringRodSettings.lighting new file mode 100644 index 00000000..e3057e38 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SpringRodSettings.lighting @@ -0,0 +1,64 @@ +%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: SpringRodSettings + serializedVersion: 4 + 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_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_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 + m_PVRTiledBaking: 0 diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/SpringRodSettings.lighting.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/SpringRodSettings.lighting.meta new file mode 100644 index 00000000..f1b982a2 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/SpringRodSettings.lighting.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2a7dd55cd73e04316941dd907bb58462 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4890085278179872738 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/TangledRopes.unity b/xiaofang/Assets/Obi/Samples/RopeAndRod/TangledRopes.unity new file mode 100644 index 00000000..1f6227f9 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/TangledRopes.unity @@ -0,0 +1,2884 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 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: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &97762687 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + 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_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_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 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: + 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_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_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} + 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: + 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_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} + 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_RootOrder: 1 + 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_Compliance: 0 + m_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_Compliance: 0 + m_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_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_Compliance: 0 + m_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_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!1001 &323187617 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + 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_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: + 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_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: 10 + m_Type: 1 + m_Shape: 0 + 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_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &615688260 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 615688258} + 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_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 58.274, y: -132.793, z: -136.708} +--- !u!1001 &688047612 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + 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_SourcePrefab: {fileID: 100100000, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} +--- !u!1001 &823195943 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + 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_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_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_RootOrder: 18 + 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: + 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_SourcePrefab: {fileID: 100100000, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} +--- !u!1001 &935761107 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + 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_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: + 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_SourcePrefab: {fileID: 100100000, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} +--- !u!1001 &1378923494 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + 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_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_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} + 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_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 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} + 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_RootOrder: 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} + 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_RootOrder: 0 + 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_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_Compliance: 0 + m_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_Compliance: 0 + m_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_Compliance: 0 + m_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_Compliance: 0 + m_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} + 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: 19 + 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: + 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_SourcePrefab: {fileID: 100100000, guid: aa6b142bbb2bb4887bebe33010c84c6c, type: 3} +--- !u!1001 &1755147364 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + 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_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: + 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_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 + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 4 + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + maxFoamVelocityStretch: 0.3 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + 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 + 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} + 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_RootOrder: 17 + 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_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_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} + 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_RootOrder: 16 + 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_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + 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: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/TangledRopes.unity.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/TangledRopes.unity.meta new file mode 100644 index 00000000..2fbd30a4 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/TangledRopes.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d1c0a7d11dfd3425e80480fae4b6546c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/WrapTheRope.unity b/xiaofang/Assets/Obi/Samples/RopeAndRod/WrapTheRope.unity new file mode 100644 index 00000000..de885db3 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/WrapTheRope.unity @@ -0,0 +1,2677 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 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: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &175885769 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3512526509595786538, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_Name + value: WrapPeg (3) + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalPosition.x + value: -3.0999997 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalPosition.y + value: 10.62 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalPosition.z + value: -0.5 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.x + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 90 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} +--- !u!114 &175885770 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 3433872735350211203, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + m_PrefabInstance: {fileID: 175885769} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 39f0f8f454a2049f3af7bad3dda0481e, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !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_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 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: 'Use WASD to move around. + + All pegs must be in contact with the rope!' +--- !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!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_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} + 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 &334666148 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3512526509595786538, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_Name + value: WrapPeg (5) + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_RootOrder + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalPosition.x + value: -6.24 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalPosition.y + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalPosition.z + value: -0.5 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.x + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 90 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} +--- !u!114 &334666149 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 3433872735350211203, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + m_PrefabInstance: {fileID: 334666148} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 39f0f8f454a2049f3af7bad3dda0481e, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &599321983 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 599321989} + - component: {fileID: 599321988} + - component: {fileID: 599321987} + - component: {fileID: 599321986} + - component: {fileID: 599321985} + - component: {fileID: 599321984} + - component: {fileID: 599321990} + - component: {fileID: 599321991} + m_Layer: 0 + m_Name: RopeTenser + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!54 &599321984 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 599321983} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 3 + m_AngularDrag: 0 + m_UseGravity: 0 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 122 + m_CollisionDetection: 0 +--- !u!114 &599321985 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 599321983} + 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: 599321986} + m_DistanceField: {fileID: 0} +--- !u!65 &599321986 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 599321983} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &599321987 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 599321983} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &599321988 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 599321983} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &599321989 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 599321983} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 599321983} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!114 &599321991 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 599321983} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6a01ab42f187a43818168cd1cd11d3cf, type: 3} + m_Name: + m_EditorClassIdentifier: + force: 400 +--- !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: 10 + m_Type: 1 + m_Shape: 0 + 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_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &615688260 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 615688258} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 862377252} + - component: {fileID: 862377251} + - component: {fileID: 862377250} + - component: {fileID: 862377253} + - component: {fileID: 862377254} + - component: {fileID: 862377255} + - component: {fileID: 862377256} + - component: {fileID: 862377249} + m_Layer: 0 + m_Name: Player + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!135 &862377249 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 862377248} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &862377250 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 862377248} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: edc856900ac3941a98996e21e91e215e, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &862377251 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 862377248} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &862377252 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 862377248} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 862377248} + 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: -131071 + m_SourceCollider: {fileID: 862377249} + m_DistanceField: {fileID: 0} +--- !u!54 &862377254 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 862377248} + serializedVersion: 2 + m_Mass: 30 + m_Drag: 5 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 120 + m_CollisionDetection: 0 +--- !u!114 &862377255 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 862377248} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62359d80fdc0e4315ab6331b78ec5b90, type: 3} + m_Name: + m_EditorClassIdentifier: + kinematicForParticles: 0 +--- !u!114 &862377256 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 862377248} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fdf58ad80e1cd4860aa12e8da0aa833c, type: 3} + m_Name: + m_EditorClassIdentifier: + acceleration: 30 +--- !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_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_RootOrder: 14 + 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 &1015286417 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3512526509595786538, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_Name + value: WrapPeg + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalPosition.x + value: -3.0921412 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalPosition.y + value: 3.5687833 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalPosition.z + value: -0.5 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.x + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 90 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} +--- !u!114 &1015286418 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 3433872735350211203, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + m_PrefabInstance: {fileID: 1015286417} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 39f0f8f454a2049f3af7bad3dda0481e, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1276486554 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1276486558} + - component: {fileID: 1276486557} + - component: {fileID: 1276486556} + - component: {fileID: 1276486561} + - component: {fileID: 1276486560} + - component: {fileID: 1276486559} + - component: {fileID: 1276486555} + m_Layer: 0 + m_Name: RopeSource + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1276486555 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1276486554} + 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: 1276486560} + m_DistanceField: {fileID: 0} +--- !u!23 &1276486556 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1276486554} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: edc856900ac3941a98996e21e91e215e, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1276486557 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1276486554} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1276486558 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1276486554} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1276486554} + 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: 1276486561} + m_DistanceField: {fileID: 0} +--- !u!65 &1276486560 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1276486554} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 10, y: 2, z: 1.0000002} + m_Center: {x: -5.2, y: 0, z: 0} +--- !u!65 &1276486561 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1276486554} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 10, y: 2, z: 1.0000002} + m_Center: {x: 5.2, y: 0, z: 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_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} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 824, y: 590} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1001 &1430085410 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3512526509595786538, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_Name + value: WrapPeg (4) + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalPosition.x + value: 3.1000004 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalPosition.y + value: 10.62 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalPosition.z + value: -0.5 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.x + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 90 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} +--- !u!114 &1430085411 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 3433872735350211203, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + m_PrefabInstance: {fileID: 1430085410} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 39f0f8f454a2049f3af7bad3dda0481e, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &1595626174 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3512526509595786538, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_Name + value: WrapPeg (1) + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalPosition.x + value: 3.6800003 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalPosition.y + value: 3.5687833 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalPosition.z + value: -0.5 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.x + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 90 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} +--- !u!114 &1595626175 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 3433872735350211203, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + m_PrefabInstance: {fileID: 1595626174} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 39f0f8f454a2049f3af7bad3dda0481e, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !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_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -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} + 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: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3512526509595786538, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_Name + value: WrapPeg (2) + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalPosition.x + value: 0.68 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalPosition.y + value: 6.41 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalPosition.z + value: -0.5 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.x + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 90 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} +--- !u!114 &1663334040 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 3433872735350211203, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + m_PrefabInstance: {fileID: 1663334039} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 39f0f8f454a2049f3af7bad3dda0481e, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &1717570096 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3512526509595786538, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_Name + value: WrapPeg (6) + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_RootOrder + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalPosition.x + value: 6.9300003 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalPosition.y + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalPosition.z + value: -0.5 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.x + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 90 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3512526509595786583, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} +--- !u!114 &1717570097 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 3433872735350211203, guid: 88eb4cec0c7324e51bf5e7e1342370e3, type: 3} + m_PrefabInstance: {fileID: 1717570096} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 39f0f8f454a2049f3af7bad3dda0481e, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1780856014 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1780856015} + - component: {fileID: 1780856020} + - component: {fileID: 1780856019} + - component: {fileID: 1780856017} + - component: {fileID: 1780856021} + - component: {fileID: 1780856022} + - component: {fileID: 1780856016} + - component: {fileID: 1780856023} + 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 &1780856015 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1780856014} + 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: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1780856014} + m_Enabled: 1 + m_EditorHideFlags: 0 + 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 + thicknessScale: 0.8 +--- !u!114 &1780856017 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1780856014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0.5 + smoothing: 0 + twist: 0 + indexInSystem: 0 +--- !u!23 &1780856019 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1780856014} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 03019be2b7a654429bf322c3ca0c7a0e, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &1780856020 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1780856014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f0000007000000071000000 + m_AlignBytes: 16 + groupID: 1 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_SelfCollisions: 0 + restLength_: 78.910034 + elements: + - particle1: 0 + particle2: 1 + restLength: 0.657547 + constraintForce: 0 + tearResistance: 1 + - particle1: 1 + particle2: 2 + restLength: 0.62701416 + constraintForce: 0 + tearResistance: 1 + - particle1: 2 + particle2: 3 + restLength: 0.80493164 + constraintForce: 0 + tearResistance: 1 + - particle1: 3 + particle2: 4 + restLength: 0.61681366 + constraintForce: 0 + tearResistance: 1 + - particle1: 4 + particle2: 5 + restLength: 0.68862915 + constraintForce: 0 + tearResistance: 1 + - particle1: 5 + particle2: 6 + restLength: 0.75785065 + constraintForce: 0 + tearResistance: 1 + - particle1: 6 + particle2: 7 + restLength: 0.690979 + constraintForce: 0 + tearResistance: 1 + - particle1: 7 + particle2: 8 + restLength: 0.65991974 + constraintForce: 0 + tearResistance: 1 + - particle1: 8 + particle2: 9 + restLength: 0.69579315 + constraintForce: 0 + tearResistance: 1 + - particle1: 9 + particle2: 10 + restLength: 0.73057556 + constraintForce: 0 + tearResistance: 1 + - particle1: 10 + particle2: 11 + restLength: 0.7425308 + constraintForce: 0 + tearResistance: 1 + - particle1: 11 + particle2: 12 + restLength: 0.65538025 + constraintForce: 0 + tearResistance: 1 + - particle1: 12 + particle2: 13 + restLength: 0.67697906 + constraintForce: 0 + tearResistance: 1 + - particle1: 13 + particle2: 14 + restLength: 0.69794464 + constraintForce: 0 + tearResistance: 1 + - particle1: 14 + particle2: 15 + restLength: 0.71826935 + constraintForce: 0 + tearResistance: 1 + - particle1: 15 + particle2: 16 + restLength: 0.7379761 + constraintForce: 0 + tearResistance: 1 + - particle1: 16 + particle2: 17 + restLength: 0.6853943 + constraintForce: 0 + tearResistance: 1 + - particle1: 17 + particle2: 18 + restLength: 0.67365265 + constraintForce: 0 + tearResistance: 1 + - particle1: 18 + particle2: 19 + restLength: 0.68727875 + constraintForce: 0 + tearResistance: 1 + - particle1: 19 + particle2: 20 + restLength: 0.7005005 + constraintForce: 0 + tearResistance: 1 + - particle1: 20 + particle2: 21 + restLength: 0.71331406 + constraintForce: 0 + tearResistance: 1 + - particle1: 21 + particle2: 22 + restLength: 0.72569656 + constraintForce: 0 + tearResistance: 1 + - particle1: 22 + particle2: 23 + restLength: 0.70212173 + constraintForce: 0 + tearResistance: 1 + - particle1: 23 + particle2: 24 + restLength: 0.6771431 + constraintForce: 0 + tearResistance: 1 + - particle1: 24 + particle2: 25 + restLength: 0.6863136 + constraintForce: 0 + tearResistance: 1 + - particle1: 25 + particle2: 26 + restLength: 0.6951637 + constraintForce: 0 + tearResistance: 1 + - particle1: 26 + particle2: 27 + restLength: 0.7036934 + constraintForce: 0 + tearResistance: 1 + - particle1: 27 + particle2: 28 + restLength: 0.7119217 + constraintForce: 0 + tearResistance: 1 + - particle1: 28 + particle2: 29 + restLength: 0.7198372 + constraintForce: 0 + tearResistance: 1 + - particle1: 29 + particle2: 30 + restLength: 0.6960983 + constraintForce: 0 + tearResistance: 1 + - particle1: 30 + particle2: 31 + restLength: 0.6837578 + constraintForce: 0 + tearResistance: 1 + - particle1: 31 + particle2: 32 + restLength: 0.68982315 + constraintForce: 0 + tearResistance: 1 + - particle1: 32 + particle2: 33 + restLength: 0.6956711 + constraintForce: 0 + tearResistance: 1 + - particle1: 33 + particle2: 34 + restLength: 0.7012558 + constraintForce: 0 + tearResistance: 1 + - particle1: 34 + particle2: 35 + restLength: 0.7065773 + constraintForce: 0 + tearResistance: 1 + - particle1: 35 + particle2: 36 + restLength: 0.7116852 + constraintForce: 0 + tearResistance: 1 + - particle1: 36 + particle2: 37 + restLength: 0.7085228 + constraintForce: 0 + tearResistance: 1 + - particle1: 37 + particle2: 38 + restLength: 0.68719864 + constraintForce: 0 + tearResistance: 1 + - particle1: 38 + particle2: 39 + restLength: 0.69114685 + constraintForce: 0 + tearResistance: 1 + - particle1: 39 + particle2: 40 + restLength: 0.6948738 + constraintForce: 0 + tearResistance: 1 + - particle1: 40 + particle2: 41 + restLength: 0.69838715 + constraintForce: 0 + tearResistance: 1 + - particle1: 41 + particle2: 42 + restLength: 0.7016792 + constraintForce: 0 + tearResistance: 1 + - particle1: 42 + particle2: 43 + restLength: 0.70476913 + constraintForce: 0 + tearResistance: 1 + - particle1: 43 + particle2: 44 + restLength: 0.70760345 + constraintForce: 0 + tearResistance: 1 + - particle1: 44 + particle2: 45 + restLength: 0.7007942 + constraintForce: 0 + tearResistance: 1 + - particle1: 45 + particle2: 46 + restLength: 0.6931572 + constraintForce: 0 + tearResistance: 1 + - particle1: 46 + particle2: 47 + restLength: 0.6952629 + constraintForce: 0 + tearResistance: 1 + - particle1: 47 + particle2: 48 + restLength: 0.6971512 + constraintForce: 0 + tearResistance: 1 + - particle1: 48 + particle2: 49 + restLength: 0.69885254 + constraintForce: 0 + tearResistance: 1 + - particle1: 49 + particle2: 50 + restLength: 0.70033646 + constraintForce: 0 + tearResistance: 1 + - particle1: 50 + particle2: 51 + restLength: 0.70163345 + constraintForce: 0 + tearResistance: 1 + - particle1: 51 + particle2: 52 + restLength: 0.70272446 + constraintForce: 0 + tearResistance: 1 + - particle1: 52 + particle2: 53 + restLength: 0.7003212 + constraintForce: 0 + tearResistance: 1 + - particle1: 53 + particle2: 54 + restLength: 0.6979599 + constraintForce: 0 + tearResistance: 1 + - particle1: 54 + particle2: 55 + restLength: 0.6984482 + constraintForce: 0 + tearResistance: 1 + - particle1: 55 + particle2: 56 + restLength: 0.6987381 + constraintForce: 0 + tearResistance: 1 + - particle1: 56 + particle2: 57 + restLength: 0.69882965 + constraintForce: 0 + tearResistance: 1 + - particle1: 57 + particle2: 58 + restLength: 0.6987381 + constraintForce: 0 + tearResistance: 1 + - particle1: 58 + particle2: 59 + restLength: 0.6984482 + constraintForce: 0 + tearResistance: 1 + - particle1: 59 + particle2: 60 + restLength: 0.6979599 + constraintForce: 0 + tearResistance: 1 + - particle1: 60 + particle2: 61 + restLength: 0.7003212 + constraintForce: 0 + tearResistance: 1 + - particle1: 61 + particle2: 62 + restLength: 0.70272446 + constraintForce: 0 + tearResistance: 1 + - particle1: 62 + particle2: 63 + restLength: 0.7016411 + constraintForce: 0 + tearResistance: 1 + - particle1: 63 + particle2: 64 + restLength: 0.7003403 + constraintForce: 0 + tearResistance: 1 + - particle1: 64 + particle2: 65 + restLength: 0.6988411 + constraintForce: 0 + tearResistance: 1 + - particle1: 65 + particle2: 66 + restLength: 0.6971493 + constraintForce: 0 + tearResistance: 1 + - particle1: 66 + particle2: 67 + restLength: 0.6952553 + constraintForce: 0 + tearResistance: 1 + - particle1: 67 + particle2: 68 + restLength: 0.6931648 + constraintForce: 0 + tearResistance: 1 + - particle1: 68 + particle2: 69 + restLength: 0.7007866 + constraintForce: 0 + tearResistance: 1 + - particle1: 69 + particle2: 70 + restLength: 0.7076149 + constraintForce: 0 + tearResistance: 1 + - particle1: 70 + particle2: 71 + restLength: 0.7047634 + constraintForce: 0 + tearResistance: 1 + - particle1: 71 + particle2: 72 + restLength: 0.70168114 + constraintForce: 0 + tearResistance: 1 + - particle1: 72 + particle2: 73 + restLength: 0.69838715 + constraintForce: 0 + tearResistance: 1 + - particle1: 73 + particle2: 74 + restLength: 0.6948738 + constraintForce: 0 + tearResistance: 1 + - particle1: 74 + particle2: 75 + restLength: 0.69114685 + constraintForce: 0 + tearResistance: 1 + - particle1: 75 + particle2: 76 + restLength: 0.68720055 + constraintForce: 0 + tearResistance: 1 + - particle1: 76 + particle2: 77 + restLength: 0.70853233 + constraintForce: 0 + tearResistance: 1 + - particle1: 77 + particle2: 78 + restLength: 0.7116718 + constraintForce: 0 + tearResistance: 1 + - particle1: 78 + particle2: 79 + restLength: 0.7065811 + constraintForce: 0 + tearResistance: 1 + - particle1: 79 + particle2: 80 + restLength: 0.7012558 + constraintForce: 0 + tearResistance: 1 + - particle1: 80 + particle2: 81 + restLength: 0.6956692 + constraintForce: 0 + tearResistance: 1 + - particle1: 81 + particle2: 82 + restLength: 0.6898327 + constraintForce: 0 + tearResistance: 1 + - particle1: 82 + particle2: 83 + restLength: 0.6837406 + constraintForce: 0 + tearResistance: 1 + - particle1: 83 + particle2: 84 + restLength: 0.69610405 + constraintForce: 0 + tearResistance: 1 + - particle1: 84 + particle2: 85 + restLength: 0.719841 + constraintForce: 0 + tearResistance: 1 + - particle1: 85 + particle2: 86 + restLength: 0.7119274 + constraintForce: 0 + tearResistance: 1 + - particle1: 86 + particle2: 87 + restLength: 0.7036953 + constraintForce: 0 + tearResistance: 1 + - particle1: 87 + particle2: 88 + restLength: 0.6951542 + constraintForce: 0 + tearResistance: 1 + - particle1: 88 + particle2: 89 + restLength: 0.6863098 + constraintForce: 0 + tearResistance: 1 + - particle1: 89 + particle2: 90 + restLength: 0.67714214 + constraintForce: 0 + tearResistance: 1 + - particle1: 90 + particle2: 91 + restLength: 0.702137 + constraintForce: 0 + tearResistance: 1 + - particle1: 91 + particle2: 92 + restLength: 0.7256918 + constraintForce: 0 + tearResistance: 1 + - particle1: 92 + particle2: 93 + restLength: 0.7133045 + constraintForce: 0 + tearResistance: 1 + - particle1: 93 + particle2: 94 + restLength: 0.7005091 + constraintForce: 0 + tearResistance: 1 + - particle1: 94 + particle2: 95 + restLength: 0.6872835 + constraintForce: 0 + tearResistance: 1 + - particle1: 95 + particle2: 96 + restLength: 0.67364407 + constraintForce: 0 + tearResistance: 1 + - particle1: 96 + particle2: 97 + restLength: 0.6853914 + constraintForce: 0 + tearResistance: 1 + - particle1: 97 + particle2: 98 + restLength: 0.7379751 + constraintForce: 0 + tearResistance: 1 + - particle1: 98 + particle2: 99 + restLength: 0.7182741 + constraintForce: 0 + tearResistance: 1 + - particle1: 99 + particle2: 100 + restLength: 0.6979418 + constraintForce: 0 + tearResistance: 1 + - particle1: 100 + particle2: 101 + restLength: 0.6769719 + constraintForce: 0 + tearResistance: 1 + - particle1: 101 + particle2: 102 + restLength: 0.65537786 + constraintForce: 0 + tearResistance: 1 + - particle1: 102 + particle2: 103 + restLength: 0.74254274 + constraintForce: 0 + tearResistance: 1 + - particle1: 103 + particle2: 104 + restLength: 0.7305646 + constraintForce: 0 + tearResistance: 1 + - particle1: 104 + particle2: 105 + restLength: 0.6958027 + constraintForce: 0 + tearResistance: 1 + - particle1: 105 + particle2: 106 + restLength: 0.65991473 + constraintForce: 0 + tearResistance: 1 + - particle1: 106 + particle2: 107 + restLength: 0.69097257 + constraintForce: 0 + tearResistance: 1 + - particle1: 107 + particle2: 108 + restLength: 0.75786567 + constraintForce: 0 + tearResistance: 1 + - particle1: 108 + particle2: 109 + restLength: 0.68862224 + constraintForce: 0 + tearResistance: 1 + - particle1: 109 + particle2: 110 + restLength: 0.6168027 + constraintForce: 0 + tearResistance: 1 + - particle1: 110 + particle2: 111 + restLength: 0.8049487 + constraintForce: 0 + tearResistance: 1 + - particle1: 111 + particle2: 112 + restLength: 0.6270089 + constraintForce: 0 + tearResistance: 1 + - particle1: 112 + particle2: 113 + restLength: 0.6575437 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: 7e05f85bfaeb24a649317f63f656b6bb, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0.01 + _maxBending: 0.025 + _plasticYield: 0 + _plasticCreep: 0 +--- !u!114 &1780856021 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1780856014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1780856020} + m_Target: {fileID: 862377252} + m_ParticleGroup: {fileID: 870036912147276740, guid: 7e05f85bfaeb24a649317f63f656b6bb, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1780856022 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1780856014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 1780856020} + m_Target: {fileID: 599321989} + m_ParticleGroup: {fileID: -5578146735436999353, guid: 7e05f85bfaeb24a649317f63f656b6bb, type: 2} + m_AttachmentType: 1 + m_ConstrainOrientation: 0 + m_Compliance: 0 + m_BreakThreshold: Infinity +--- !u!114 &1780856023 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1780856014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 51f5e34b2316b45c6bdf971b375b5f2e, type: 3} + m_Name: + m_EditorClassIdentifier: + minTension: 0 + maxTension: 0.05 + normalColor: {r: 0.22921856, g: 0.9528302, b: 0.40241542, a: 1} + tensionColor: {r: 1, g: 0, b: 0, a: 1} + tenser: {fileID: 599321991} + tenserThreshold: -13 + tenserMax: 1 +--- !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: 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 + colliderCCD: 1 + particleCCD: 0 + shockPropagation: 0 + surfaceCollisionIterations: 16 + surfaceCollisionTolerance: 0.001 + m_MaxSurfaceChunks: 32768 + maxQueryResults: 8192 + maxFoamParticles: 8192 + maxParticleNeighbors: 128 + maxParticleContacts: 4 + gravity: {x: 0, y: -9.81, z: 0} + gravitySpace: 1 + ambientWind: {x: 0, y: 0, z: 0} + windSpace: 1 + foamSubsteps: 1 + maxFoamVelocityStretch: 0.3 + foamFade: {x: 0.05, y: 0.8} + foamAccelAgingRange: {x: 0.5, y: 0.8} + foamAccelAging: 4 + worldLinearInertiaScale: 0 + worldAngularInertiaScale: 0 + synchronousSpatialQueries: 0 + distanceConstraintParameters: + evaluationOrder: 0 + iterations: 4 + SORFactor: 1 + enabled: 1 + bendingConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 1 + particleCollisionConstraintParameters: + evaluationOrder: 0 + iterations: 2 + SORFactor: 1 + enabled: 0 + particleFrictionConstraintParameters: + evaluationOrder: 1 + iterations: 1 + SORFactor: 1 + enabled: 0 + collisionConstraintParameters: + evaluationOrder: 0 + iterations: 4 + 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: 2 + 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} + 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: + 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: 92b1832c67f564e9fa43a180598111e8, type: 3} + m_Name: + m_EditorClassIdentifier: + wrappables: + - {fileID: 1015286418} + - {fileID: 1595626175} + - {fileID: 1663334040} + - {fileID: 175885770} + - {fileID: 1430085411} + - {fileID: 334666149} + - {fileID: 1717570097} + onFinish: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1406884018} + m_TargetAssemblyTypeName: + 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 &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} + 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: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !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} + 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_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_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} + 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} diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/WrapTheRope.unity.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/WrapTheRope.unity.meta new file mode 100644 index 00000000..e62a89f3 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/WrapTheRope.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: fc2b8ae2ba09f45b7be65218f74cd121 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/WrapTheRopeSettings.lighting b/xiaofang/Assets/Obi/Samples/RopeAndRod/WrapTheRopeSettings.lighting new file mode 100644 index 00000000..bc62f44f --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/WrapTheRopeSettings.lighting @@ -0,0 +1,64 @@ +%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: WrapTheRopeSettings + serializedVersion: 4 + 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_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_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 + m_PVRTiledBaking: 0 diff --git a/xiaofang/Assets/Obi/Samples/RopeAndRod/WrapTheRopeSettings.lighting.meta b/xiaofang/Assets/Obi/Samples/RopeAndRod/WrapTheRopeSettings.lighting.meta new file mode 100644 index 00000000..b753eec1 --- /dev/null +++ b/xiaofang/Assets/Obi/Samples/RopeAndRod/WrapTheRopeSettings.lighting.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e16f40cccc9f747d3a88842b4591f225 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4890085278179872738 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts.meta b/xiaofang/Assets/Obi/Scripts.meta new file mode 100644 index 00000000..3253a175 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7dc12f70242e74cd485e5ba96559b3ec +folderAsset: yes +timeCreated: 1435569421 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common.meta b/xiaofang/Assets/Obi/Scripts/Common.meta new file mode 100644 index 00000000..60bb6b90 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e288a2209cca94fbfaf8c2fb1c51506b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Actors.meta b/xiaofang/Assets/Obi/Scripts/Common/Actors.meta new file mode 100644 index 00000000..8cccbdd5 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Actors.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: df93aa6716fd8485b9e0d6e29b00d432 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Actors/IObiParticleCollection.cs b/xiaofang/Assets/Obi/Scripts/Common/Actors/IObiParticleCollection.cs new file mode 100644 index 00000000..691131ff --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Actors/IObiParticleCollection.cs @@ -0,0 +1,25 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + // Interface for classes that hold a collection of particles. Contains method to get common particle properties. + public interface IObiParticleCollection + { + int particleCount { get; } + int activeParticleCount { get; } + 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/xiaofang/Assets/Obi/Scripts/Common/Actors/IObiParticleCollection.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Actors/IObiParticleCollection.cs.meta new file mode 100644 index 00000000..ec362ee0 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Actors/IObiParticleCollection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0281a989d5aa445b0bcb43597806adf7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Actors/ObiActor.cs b/xiaofang/Assets/Obi/Scripts/Common/Actors/ObiActor.cs new file mode 100644 index 00000000..74a3793b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Actors/ObiActor.cs @@ -0,0 +1,1261 @@ +using UnityEngine; +using System; +using System.Collections; +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 + * and released together. + */ + [ExecuteInEditMode] + [DisallowMultipleComponent] + public abstract class ObiActor : MonoBehaviour, IObiParticleCollection + { + public class ObiActorSolverArgs : System.EventArgs + { + public ObiSolver solver { get; } + + public ObiActorSolverArgs(ObiSolver solver) + { + this.solver = solver; + } + } + + 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 simulatedTime, float substepTime); + public delegate void ActorBlueprintCallback(ObiActor actor, ObiActorBlueprint blueprint); + + /// + /// Called when the actor blueprint has been loaded into the solver. + /// + public event ActorBlueprintCallback OnBlueprintLoaded; + + /// + /// Called when the actor blueprint has been unloaded from the solver. + /// + public event ActorBlueprintCallback OnBlueprintUnloaded; + + /// + /// 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 ActorBlueprintCallback OnBlueprintRegenerated; + + /// + /// Called before simulation starts. + /// + public event ActorStepCallback OnSimulationStart; + + /// + /// Called at the end of each frame, after interpolation but before rendering. + /// + public event ActorStepCallback OnInterpolate; + + [HideInInspector] protected int m_ActiveParticleCount = 0; + + /// + /// Index of each one of the actor's particles in the solver. + /// + [HideInInspector] public ObiNativeIntList solverIndices; + + /// + /// For each of the actor's constraint types, offset of every batch in the solver. + /// + [HideInInspector] public List[] solverBatchOffsets; + + protected ObiSolver m_Solver; + protected bool m_Loaded = false; + public int groupID = 0; + + private ObiActorBlueprint m_State; + private ObiActorBlueprint m_BlueprintInstance; + private ObiPinConstraintsData m_PinConstraints; + private BufferedForces bufferedForces = new BufferedForces(); + [SerializeField] [HideInInspector] protected ObiCollisionMaterial m_CollisionMaterial; + [SerializeField] [HideInInspector] protected bool m_SurfaceCollisions = false; + + /// + /// The solver in charge of simulating this actor. + /// + /// This is the first ObiSlver component found up the actor's hierarchy. + public ObiSolver solver + { + get { return m_Solver; } + } + + /// + /// True if the actor blueprint has been loaded into a solver. + /// If true, it guarantees actor.solver, actor.solverIndices and actor.solverBatchOffsets won't be null. + /// + public bool isLoaded + { + get { return m_Loaded; } + } + + /// + /// The collision material being used by this actor. + /// + public ObiCollisionMaterial collisionMaterial + { + get + { + return m_CollisionMaterial; + } + set + { + if (m_CollisionMaterial != value) + { + m_CollisionMaterial = value; + UpdateCollisionMaterials(); + } + } + } + + /// + /// Whether to use simplices (triangles, edges) for contact generation. + /// + public virtual bool surfaceCollisions + { + get + { + return m_SurfaceCollisions; + } + set + { + if (value != m_SurfaceCollisions) + { + m_SurfaceCollisions = value; + if (m_Solver != null) + { + m_Solver.dirtySimplices |= simplexTypes; + } + } + } + } + + /// + /// Amount of particles allocated by this actor. + /// + public int particleCount + { + get + { + return sourceBlueprint != null ? sourceBlueprint.particleCount : 0; + } + } + + /// + /// Amount of particles in use by this actor. + /// + /// This will always be equal to or smaller than . + public int activeParticleCount + { + get + { + return m_ActiveParticleCount; + } + } + + /// + /// Whether this actors makes use of particle orientations or not. + /// + public bool usesOrientedParticles + { + get + { + return sourceBlueprint != null && + sourceBlueprint.invRotationalMasses != null && sourceBlueprint.invRotationalMasses.Length > 0 && + sourceBlueprint.orientations != null && sourceBlueprint.orientations.Length > 0 && + sourceBlueprint.restOrientations != null && sourceBlueprint.restOrientations.Length > 0; + } + } + + /// + /// If true, it means particles may not be completely spherical, but ellipsoidal. + /// + public virtual bool usesAnisotropicParticles + { + get + { + return false; + } + } + + public Oni.SimplexType simplexTypes + { + get + { + return (sourceBlueprint != null) ? sourceBlueprint.simplexTypes : Oni.SimplexType.Point; + } + } + + /// + /// Matrix that transforms from the actor's local space to the solver's local space. + /// + /// If there's no solver present, this is the same as the actor's local to world matrix. + public Matrix4x4 actorLocalToSolverMatrix + { + get + { + if (m_Solver != null) + return m_Solver.transform.worldToLocalMatrix * transform.localToWorldMatrix; + else + return transform.localToWorldMatrix; + } + } + + /// + /// Matrix that transforms from the solver's local space to the actor's local space. + /// + /// If there's no solver present, this is the same as the actor's world to local matrix. + /// This is always the same as the inverse of . + public Matrix4x4 actorSolverToLocalMatrix + { + get + { + if (m_Solver != null) + return transform.worldToLocalMatrix * m_Solver.transform.localToWorldMatrix; + else + return transform.worldToLocalMatrix; + } + } + + /// + /// Reference to the blueprint asset used by this actor. + /// + public abstract ObiActorBlueprint sourceBlueprint + { + get; + } + + /// + /// Reference to the blueprint in use by this actor. + /// + /// If you haven't called before, this will be the same as . + /// If you have called before, it will be the same as . + public ObiActorBlueprint sharedBlueprint + { + get + { + if (m_BlueprintInstance != null) + return m_BlueprintInstance; + return sourceBlueprint; + } + } + + /// + /// Returns a unique instance of this actor's . + /// + /// This is mostly used when the actor needs to change some blueprint data at runtime, + /// and you don't want to change the blueprint asset as this would affect all other actors using it. Tearable cloth and ropes + /// make use of this. + public ObiActorBlueprint blueprint + { + get + { + if (m_BlueprintInstance == null && sourceBlueprint != null) + m_BlueprintInstance = Instantiate(sourceBlueprint); + + return m_BlueprintInstance; + } + } + + protected virtual void Awake() + { +#if UNITY_EDITOR + + // Check if this script's GameObject is in a PrefabStage +#if UNITY_2021_2_OR_NEWER + var prefabStage = UnityEditor.SceneManagement.PrefabStageUtility.GetPrefabStage(gameObject); +#else + var prefabStage = UnityEditor.Experimental.SceneManagement.PrefabStageUtility.GetPrefabStage(gameObject); +#endif + + if (prefabStage != null) + { + // Only create a solver if there's not one up our hierarchy. + if (GetComponentInParent() == null) + { + // Add our own environment root and move it to the PrefabStage scene + var newParent = new GameObject("ObiSolver (Environment)", typeof(ObiSolver)); + UnityEngine.SceneManagement.SceneManager.MoveGameObjectToScene(newParent, gameObject.scene); + transform.root.parent = newParent.transform; + } + } +#endif + } + + protected virtual void OnDestroy() + { + if (m_BlueprintInstance != null) + DestroyImmediate(m_BlueprintInstance); + } + + protected virtual void OnEnable() + { + solverBatchOffsets = new List[Oni.ConstraintTypeCount]; + for (int i = 0; i < solverBatchOffsets.Length; ++i) + solverBatchOffsets[i] = new List(); + + m_PinConstraints = new ObiPinConstraintsData(); + + // when an actor is enabled, grabs the first solver up its hierarchy, + // initializes it (if not initialized) and gets added to it. + m_Solver = GetComponentInParent(); + + AddToSolver(); + } + + protected virtual void OnDisable() + { + RemoveFromSolver(); + } + + protected virtual void OnValidate() + { + UpdateCollisionMaterials(); + } + + private void OnTransformParentChanged() + { + if (isActiveAndEnabled) + SetSolver(GetComponentInParent()); + } + + /// + /// Adds this actor to its solver, if any. Automatically called by . + /// + public void AddToSolver() + { + if (m_Solver != null) + { + if (sourceBlueprint != null) + sourceBlueprint.OnBlueprintGenerate += OnBlueprintRegenerate; + + m_Solver.AddActor(this); + } + } + + /// + /// Remove this actor from its solver, if any. Automatically called by . + /// + public void RemoveFromSolver() + { + if (m_Solver != null) + { + if (sourceBlueprint != null) + sourceBlueprint.OnBlueprintGenerate -= OnBlueprintRegenerate; + + m_Solver.RemoveActor(this); + } + } + + /// + /// 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. + protected void SetSolver(ObiSolver newSolver) + { + // In case the first solver up our hierarchy is not the one we're currently in, change solver. + if (newSolver != m_Solver) + { + RemoveFromSolver(); + + m_Solver = newSolver; + + AddToSolver(); + } + } + + protected virtual void OnBlueprintRegenerate(ObiActorBlueprint blueprint) + { + // 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 (isLoaded) + { + int index = m_CollisionMaterial != null ? m_CollisionMaterial.handle.index : -1; + 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) + { + + } + + /// + /// Copies all data (position, velocity, phase, etc) from one particle to another one. + /// + /// Index in the actor arrays of the particle we will copy data from. + /// Index in the actor arrays of the particle we will copy data to. + /// + /// Whether the indices passed are within actor bounds. + /// + /// Extend this method to implement copying your own custom particle data in custom actors. + public virtual bool CopyParticle(int actorSourceIndex, int actorDestIndex) + { + if (!isLoaded || + actorSourceIndex < 0 || actorSourceIndex >= solverIndices.count || + actorDestIndex < 0 || actorDestIndex >= solverIndices.count) + return false; + + int sourceIndex = solverIndices[actorSourceIndex]; + int destIndex = solverIndices[actorDestIndex]; + + // Copy solver data: + m_Solver.prevPositions[destIndex] = m_Solver.prevPositions[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.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]; + m_Solver.phases[destIndex] = m_Solver.phases[sourceIndex]; + m_Solver.filters[destIndex] = m_Solver.filters[sourceIndex]; + m_Solver.colors[destIndex] = m_Solver.colors[sourceIndex]; + + return true; + } + + /// + /// Teleports one actor particle to a certain position in solver space. + /// + /// Index in the actor arrays of the particle we will teeleport. + /// Position to teleport the particle to, expressed in solver space. + public void TeleportParticle(int actorIndex, Vector3 position) + { + if (!isLoaded || actorIndex < 0 || actorIndex >= solverIndices.count) + return; + + int solverIndex = solverIndices[actorIndex]; + + Vector4 delta = (Vector4)position - m_Solver.positions[solverIndex]; + m_Solver.positions[solverIndex] += delta; + m_Solver.prevPositions[solverIndex] += delta; + m_Solver.endPositions[solverIndex] += delta; + m_Solver.startPositions[solverIndex] += delta; + } + + /// + /// Teleports the entire actor to a new location / orientation. + /// + /// World space position to teleport the actor to. + /// World space rotation to teleport the actor to. + public virtual Matrix4x4 Teleport(Vector3 position, Quaternion rotation) + { + if (!isLoaded) + return Matrix4x4.identity; + + // Subtract current transform position/rotation, then add new world space position/rotation. + // Lastly, set the transform to the new position/rotation. + Matrix4x4 offset = solver.transform.worldToLocalMatrix * + Matrix4x4.TRS(position, Quaternion.identity, Vector3.one) * + Matrix4x4.TRS(Vector3.zero, rotation, Vector3.one) * + Matrix4x4.TRS(Vector3.zero, Quaternion.Inverse(transform.rotation), Vector3.one) * + Matrix4x4.TRS(-transform.position, Quaternion.identity, Vector3.one) * + solver.transform.localToWorldMatrix; + + Quaternion rotOffset = offset.rotation; + + for (int i = 0; i < solverIndices.count; i++) + { + int solverIndex = solverIndices[i]; + + 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.endOrientations[solverIndex] = + m_Solver.startOrientations[solverIndex] = rotOffset * m_Solver.orientations[solverIndex]; + + m_Solver.velocities[solverIndex] = Vector4.zero; + m_Solver.angularVelocities[solverIndex] = Vector4.zero; + } + + transform.position = position; + transform.rotation = rotation; + + return offset; + } + + protected virtual void SwapWithFirstInactiveParticle(int actorIndex) + { + // update solver indices: + m_Solver.particleToActor[solverIndices[actorIndex]].indexInActor = activeParticleCount; + m_Solver.particleToActor[solverIndices[activeParticleCount]].indexInActor = actorIndex; + solverIndices.Swap(actorIndex, activeParticleCount); + } + + /// + /// Activates one particle. + /// + /// + /// 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 virtual bool ActivateParticle() + { + if (activeParticleCount >= particleCount) + return false; + + // set active particle radius W to 1. + var radii = m_Solver.principalRadii[solverIndices[m_ActiveParticleCount]]; + radii.w = 1; + m_Solver.principalRadii[solverIndices[m_ActiveParticleCount]] = radii; + + m_ActiveParticleCount++; + m_Solver.dirtyActiveParticles = true; + m_Solver.dirtySimplices |= simplexTypes; + + return true; + } + + /// + /// Deactivates one particle. + /// + /// Index in the actor arrays of the particle we will deactivate. + /// + /// True if the particle was active. False if the particle was already inactive. + /// + /// 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 virtual bool DeactivateParticle(int actorIndex) + { + if (!IsParticleActive(actorIndex)) + return false; + + m_ActiveParticleCount--; + + // 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; + } + + /// + /// Returns whether a given particle is active. + /// + /// Index in the actor arrays of the particle. + /// + /// True if the particle is active. False if the particle is inactive. + /// + public virtual bool IsParticleActive(int actorIndex) + { + return actorIndex < activeParticleCount; + } + + /// + /// Updates particle phases in the solver at runtime, including or removing the self-collision flag. + /// + public virtual void SetSelfCollisions(bool selfCollisions) + { + if (m_Solver != null && Application.isPlaying && isLoaded) + { + for (int i = 0; i < particleCount; i++) + { + if (selfCollisions) + m_Solver.phases[solverIndices[i]] |= (int)ObiUtils.ParticleFlags.SelfCollide; + else + m_Solver.phases[solverIndices[i]] &= ~(int)ObiUtils.ParticleFlags.SelfCollide; + } + } + } + + /// + /// Updates particle phases in the solver at runtime, including or removing the one-sided flag. + /// + public virtual void SetOneSided(bool oneSided) + { + if (m_Solver != null && Application.isPlaying && isLoaded) + { + for (int i = 0; i < particleCount; i++) + { + if (oneSided) + m_Solver.phases[solverIndices[i]] |= (int)ObiUtils.ParticleFlags.OneSided; + else + m_Solver.phases[solverIndices[i]] &= ~(int)ObiUtils.ParticleFlags.OneSided; + } + } + } + + /// + /// Marks simplices dirty. + /// + public void SetSimplicesDirty() + { + if (m_Solver != null) + m_Solver.dirtySimplices |= simplexTypes; + } + + /// + /// Marks a given constraint type as dirty. + /// + /// Type of the constraints that need re-creation. + /// This will cause the solver to perform a constraint re-creation at the start of the next step. Needed when the constraint data in an actor changes at runtime, + /// as a result of changing topology (torn cloth or ropes), or changes in internal constraint parameters such as compliance values. This is a relatively expensive operation, + /// so it's best to amortize as many constraint modification operations as possible in a single step. + public void SetConstraintsDirty(Oni.ConstraintType constraintType) + { + if (m_Solver != null) + m_Solver.dirtyConstraints |= 1 << (int)constraintType; + } + + /// + /// Marks rendering dirty. + /// + public void SetRenderingDirty(Oni.RenderingSystemType rendererType) + { + if (m_Solver != null) + m_Solver.dirtyRendering |= (int)rendererType; + } + + /// + /// Returns the data representation of constraints of a given type being simulated by this solver. + /// + /// Type of the constraints that will be returned by this method. + /// + /// The runtime constraints of the type speficied. Most constraints are stored in the blueprint, with a couple notable exceptions: pin and stitch constraints + /// are always created at runtime, so they're not stored in the blueprint but in the actor itself. + /// + public IObiConstraints GetConstraintsByType(Oni.ConstraintType type) + { + // 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 (sharedBlueprint != null) + return sharedBlueprint.GetConstraintsByType(type); + + return null; + } + + + + /// + /// Call when some particle properties have been modified and need updating. + /// + /// Does not do anything by default. Call when manually modifying particle properties in the solver, should the actor need to do some book keeping. + /// For softbodies, updates their rest state. + public virtual void UpdateParticleProperties() + { + } + + /// + /// Returns the index of this particle in the solver arrays. + /// + /// Index of the particle in the actor arrays. + /// + /// The index of a given particle in the solver arrays. + /// + /// At runtime when the blueprint is loaded, this is the same as calling actor.solverIndices[solverIndex]. + /// If the blueprint is not loaded it will return the same index passed to it: actorIndex. + /// Note that this function does not perform any range checking. + public int GetParticleRuntimeIndex(int actorIndex) + { + if (isLoaded) + return solverIndices[actorIndex]; + return actorIndex; + } + + + /// + /// Given a solver particle index, returns the position of that particle in world space. + /// + /// Index of the particle in the solver arrays. + /// + /// The position of a given particle in world space. + /// + public Vector3 GetParticlePosition(int solverIndex) + { + if (isLoaded) + return m_Solver.transform.TransformPoint(m_Solver.renderablePositions[solverIndex]); + return Vector3.zero; + } + + /// + /// Given a solver particle index, returns the orientation of that particle in world space. + /// + /// Index of the particle in the solver arrays. + /// + /// The orientation of a given particle in world space. + /// + public Quaternion GetParticleOrientation(int solverIndex) + { + if (isLoaded) + return m_Solver.transform.rotation * m_Solver.renderableOrientations[solverIndex]; + 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. + /// + /// Index of the particle in the solver arrays. + /// First basis vector of the frame. Contains particle radius along this axis in the 4th position. + /// Second basis vector of the frame. Contains particle radius along this axis in the 4th position.. + /// Third basis vector of the frame. Contains particle radius along this axis in the 4th position. + public void GetParticleAnisotropy(int solverIndex, ref Vector4 b1, ref Vector4 b2, ref Vector4 b3) + { + if (isLoaded && usesAnisotropicParticles) + { + 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[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.renderableRadii[solverIndex][0]; + } + } + + /// + /// Given a solver particle index, returns the maximum world space radius of that particle, in any axis. + /// + /// Index of the particle in the solver arrays. + /// + /// The maximum radius of a given particle in world space. + /// + public float GetParticleMaxRadius(int solverIndex) + { + if (isLoaded) + return m_Solver.maxScale * m_Solver.principalRadii[solverIndex][0]; + return 0; + } + + + /// + /// Given a solver particle index, returns the color of that particle. + /// + /// Index of the particle in the solver arrays. + /// + /// The color of the particle. + /// + public Color GetParticleColor(int solverIndex) + { + if (isLoaded) + return m_Solver.colors[solverIndex]; + return Color.white; + } + + /// + /// Sets a given category value for all particles in the actor. + /// + /// Category value. + public void SetFilterCategory(int newCategory) + { + newCategory = Mathf.Clamp(newCategory, ObiUtils.MinCategory, ObiUtils.MaxCategory); + + for (int i = 0; i < particleCount; ++i) + { + int solverIndex = solverIndices[i]; + var mask = ObiUtils.GetMaskFromFilter(solver.filters[solverIndex]); + solver.filters[solverIndex] = ObiUtils.MakeFilter(mask, newCategory); + } + } + + /// + /// Sets a given mask value for all particles in the actor. + /// + /// Mask value. + public void SetFilterMask(int newMask) + { + newMask = Mathf.Clamp(newMask, ObiUtils.CollideWithNothing, ObiUtils.CollideWithEverything); + + for (int i = 0; i < particleCount; ++i) + { + int solverIndex = solverIndices[i]; + var category = ObiUtils.GetCategoryFromFilter(solver.filters[solverIndex]); + solver.filters[solverIndex] = ObiUtils.MakeFilter(newMask, category); + } + } + + /// + /// Sets the inverse mass of each particle so that the total actor mass matches the one passed by parameter. + /// + /// The actor's total mass. + public void SetMass(float mass) + { + if (Application.isPlaying && isLoaded && activeParticleCount > 0) + { + float invMass = 1.0f / (mass / activeParticleCount); + + for (int i = 0; i < activeParticleCount; ++i) + { + int solverIndex = solverIndices[i]; + m_Solver.invMasses[solverIndex] = invMass; + m_Solver.invRotationalMasses[solverIndex] = invMass; + } + } + } + + /// + /// Returns the actor's mass (sum of all particle masses), and the position of its center of mass. + /// + /// The actor's center of mass, expressed in solver space. + /// Particles with infinite mass (invMass = 0) are ignored. + public float GetMass(out Vector3 com) + { + + float actorMass = 0; + com = Vector3.zero; + + if (Application.isPlaying && isLoaded && activeParticleCount > 0) + { + Vector4 com4 = Vector4.zero; + + for (int i = 0; i < activeParticleCount; ++i) + { + if (m_Solver.invMasses[solverIndices[i]] > 0) + { + float mass = 1.0f / m_Solver.invMasses[solverIndices[i]]; + actorMass += mass; + com4 += m_Solver.positions[solverIndices[i]] * mass; + } + } + + com = com4; + if (actorMass > float.Epsilon) + com /= actorMass; + } + + return actorMass; + } + + /// + ///Adds an external force to all particles in the actor. + /// + /// Value expressed in solver space. + /// Type of "force" applied. + public void AddForce(Vector3 force, ForceMode forceMode) + { + if (force.sqrMagnitude > Mathf.Epsilon) + bufferedForces.dirty = true; + + switch (forceMode) + { + case ForceMode.Force: + bufferedForces.force += (Vector4)force; + break; + case ForceMode.Acceleration: + bufferedForces.acceleration += (Vector4)force; + break; + case ForceMode.Impulse: + bufferedForces.impulse += (Vector4)force; + break; + case ForceMode.VelocityChange: + bufferedForces.velChange += (Vector4)force; + break; + } + } + + /// + /// Adds a torque to the actor. + /// + /// Value expressed in solver space. + /// Type of "torque" applied. + public void AddTorque(Vector3 force, ForceMode forceMode) + { + if (force.sqrMagnitude > Mathf.Epsilon) + bufferedForces.dirty = true; + + switch (forceMode) + { + 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) + { + + Matrix4x4 l2sTransform = actorLocalToSolverMatrix; + Quaternion l2sRotation = l2sTransform.rotation; + + for (int i = 0; i < solverIndices.count; i++) + { + int k = solverIndices[i]; + + if (bp.positions != null && i < bp.positions.Length) + { + 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.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]; + } + + if (bp.restPositions != null && i < bp.restPositions.Length) + m_Solver.restPositions[k] = bp.restPositions[i]; + + if (bp.restOrientations != null && i < bp.restOrientations.Length) + m_Solver.restOrientations[k] = bp.restOrientations[i]; + + if (bp.velocities != null && i < bp.velocities.Length) + m_Solver.velocities[k] = l2sTransform.MultiplyVector(bp.velocities[i]); + + if (bp.angularVelocities != null && i < bp.angularVelocities.Length) + m_Solver.angularVelocities[k] = l2sTransform.MultiplyVector(bp.angularVelocities[i]); + + if (bp.invMasses != null && i < bp.invMasses.Length) + m_Solver.invMasses[k] = bp.invMasses[i]; + + if (bp.invRotationalMasses != null && i < bp.invRotationalMasses.Length) + m_Solver.invRotationalMasses[k] = bp.invRotationalMasses[i]; + + if (bp.principalRadii != null && i < bp.principalRadii.Length) + { + 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]; + + if (bp.colors != null && i < bp.colors.Length) + m_Solver.colors[k] = bp.colors[i]; + + m_Solver.phases[k] = ObiUtils.MakePhase(groupID, 0); + } + + m_ActiveParticleCount = sourceBlueprint.activeParticleCount; + m_Solver.dirtyActiveParticles = 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_Solver.dirtyActiveParticles = true; + m_Solver.dirtyDeformableTriangles = true; + m_Solver.dirtyDeformableEdges = true; + m_Solver.dirtySimplices |= simplexTypes; + m_Solver.dirtyConstraints |= ~0; + } + + /// + /// Resets the position and velocity of all particles, to the values stored in the blueprint. + /// + /// Note however + /// that this does not affect constraints, so if you've torn a cloth/rope or resized a rope, calling ResetParticles won't restore + /// the initial topology of the actor. + public void ResetParticles() + { + if (isLoaded) + { + Matrix4x4 l2sTransform = actorLocalToSolverMatrix; + Quaternion l2sRotation = l2sTransform.rotation; + + for (int i = 0; i < particleCount; ++i) + { + int solverIndex = solverIndices[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.startOrientations[solverIndex] = solver.endOrientations[solverIndex] = solver.orientations[solverIndex] = l2sRotation * sourceBlueprint.orientations[i]; + solver.angularVelocities[solverIndex] = l2sTransform.MultiplyVector(sourceBlueprint.angularVelocities[i]); + } + } + } + } + + #endregion + + #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 bool SaveStateToBlueprint(ObiActorBlueprint bp) + { + if (bp == null || !m_Loaded) + return false; + + Matrix4x4 l2sTransform = actorLocalToSolverMatrix.inverse; + Quaternion l2sRotation = l2sTransform.rotation; + + // blueprint might have been regenerated, and reduced its size: + for (int i = 0; i < solverIndices.count; i++) + { + int k = solverIndices[i]; + + 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 (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(m_State); + m_State = Instantiate(sourceBlueprint); + SaveStateToBlueprint(m_State); + } + + public void ClearState() + { + DestroyImmediate(m_State); + } + + #endregion + + #region Solver callbacks + + /// + /// Loads this actor's blueprint into a given solver. Automatically called by . + /// + public virtual void LoadBlueprint(ObiSolver solver) + { + var bp = sharedBlueprint; + + // in case we have temporary state, load that instead of the original blueprint. + if (Application.isPlaying) + { + bp = m_State != null ? m_State : sourceBlueprint; + } + + m_Loaded = true; + + LoadBlueprintParticles(bp); + + OnBlueprintLoaded?.Invoke(this, bp); + } + + /// + /// Unloads this actor's blueprint from a given solver. Automatically called by . + /// + public virtual void UnloadBlueprint(ObiSolver solver) + { + // instantiate blueprint and store current state in the instance: + if (Application.isPlaying) + StoreState(); + + m_Loaded = false; + + // unload the blueprint. + UnloadBlueprintParticles(); + + OnBlueprintUnloaded?.Invoke(this, sharedBlueprint); + } + + public virtual void SimulationStart(float timeToSimulate, float substepTime) + { + 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 SimulationEnd(float simulatedTime, float substepTime) + { + + } + + public virtual void RequestReadback() + { + + } + + public virtual void Interpolate(float simulatedTime, float substepTime) + { + // Update particle positions/orientations in the solver: + if (!Application.isPlaying && isLoaded) + { + Matrix4x4 l2sTransform = actorLocalToSolverMatrix; + Quaternion l2sRotation = l2sTransform.rotation; + + for (int i = 0; i < solverIndices.count; i++) + { + int k = solverIndices[i]; + + if (sourceBlueprint.positions != null && i < sourceBlueprint.positions.Length) + { + 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] = m_Solver.orientations[k] = m_Solver.startOrientations[k] = m_Solver.endOrientations[k] = l2sRotation * sourceBlueprint.orientations[i]; + } + } + } + + OnInterpolate?.Invoke(this, simulatedTime, substepTime); + } + + public virtual void OnSolverVisibilityChanged(bool visible) + { + } + + #endregion + + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Actors/ObiActor.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Actors/ObiActor.cs.meta new file mode 100644 index 00000000..2030a7c5 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Actors/ObiActor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4602f0908b7ed409dbe198de06df8955 +timeCreated: 1449041314 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends.meta new file mode 100644 index 00000000..22ad70e3 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8c24459c92f72479e883a382c415ea21 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst.meta new file mode 100644 index 00000000..018fd9d4 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0ccea30afd7eb40d988c19314f42b11c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstBackend.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstBackend.cs new file mode 100644 index 00000000..6a94fc9d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstBackend.cs @@ -0,0 +1,26 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using UnityEngine; +using Unity.Jobs; +using Unity.Mathematics; +using Unity.Collections; +using System; +using System.Collections; + +namespace Obi +{ + public class BurstBackend : IObiBackend + { + #region Solver + public ISolverImpl CreateSolver(ObiSolver solver, int capacity) + { + return new BurstSolverImpl(solver); + } + public void DestroySolver(ISolverImpl solver) + { + if (solver != null) + solver.Destroy(); + } + #endregion + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstBackend.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstBackend.cs.meta new file mode 100644 index 00000000..0fa2befc --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstBackend.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e3c1f86ca79494b9198874007d195a38 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstIntegration.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstIntegration.cs new file mode 100644 index 00000000..baaa099a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstIntegration.cs @@ -0,0 +1,48 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) + +using Unity.Mathematics; +using System.Runtime.CompilerServices; + +namespace Obi +{ + public static class BurstIntegration + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float4 IntegrateLinear(float4 position, float4 velocity, float dt) + { + return position + velocity * dt; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float4 DifferentiateLinear(float4 position, float4 prevPosition, float dt) + { + return (position - prevPosition) / dt; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static quaternion AngularVelocityToSpinQuaternion(quaternion rotation, float4 angularVelocity, float dt) + { + var delta = new quaternion(angularVelocity.x, + angularVelocity.y, + angularVelocity.z, 0); + + return new quaternion(0.5f * math.mul(delta,rotation).value * dt); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static quaternion IntegrateAngular(quaternion rotation, float4 angularVelocity, float dt) + { + rotation.value += AngularVelocityToSpinQuaternion(rotation,angularVelocity, dt).value; + return math.normalize(rotation); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float4 DifferentiateAngular(quaternion rotation, quaternion prevRotation, float dt) + { + 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); + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstIntegration.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstIntegration.cs.meta new file mode 100644 index 00000000..a4dbd114 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstIntegration.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ba69cdb85ae0f4523810cb349ded03d5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstJobHandle.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstJobHandle.cs new file mode 100644 index 00000000..df3caa35 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstJobHandle.cs @@ -0,0 +1,22 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Jobs; + +namespace Obi +{ + public class BurstJobHandle : IObiJobHandle + { + public JobHandle jobHandle { get; set; } = new JobHandle(); + + public void Complete() + { + jobHandle.Complete(); + } + + public void Release() + { + jobHandle = new JobHandle(); + } + } +} +#endif + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstJobHandle.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstJobHandle.cs.meta new file mode 100644 index 00000000..dc7d643a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstJobHandle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dc827231eb963458fad0d395a186f910 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstMath.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstMath.cs new file mode 100644 index 00000000..ec9df31d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstMath.cs @@ -0,0 +1,1023 @@ +#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 +{ + public static class BurstMath + { + + public const float epsilon = 0.0000001f; + public const float zero = 0; + public const float one = 1; + public static readonly float golden = (math.sqrt(5.0f) + 1) / 2.0f; + + public static unsafe void AddRange(this NativeList dst, U[] array) 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 + 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 float3x3 multrnsp(in float4 column, in float4 row) + { + 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)] + public static float4 project(this float4 vector, float4 onto) + { + float len = math.lengthsq(onto); + if (len < epsilon) + return float4.zero; + 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) + { + float4x4 rotMatrix = rotation.toMatrix(); + return math.mul(rotMatrix, math.mul(tensor.asDiagonal(), math.transpose(rotMatrix))); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float RotationalInvMass(float4x4 inverseInertiaTensor, float4 point, float4 direction) + { + float4 cr = math.mul(inverseInertiaTensor, new float4(math.cross(point.xyz, direction.xyz), 0)); + return math.dot(math.cross(cr.xyz, point.xyz), direction.xyz); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float4 GetParticleVelocityAtPoint(float4 position, float4 prevPosition, float4 point, float dt) + { + // no angular velocity, so calculate and return linear velocity only: + return BurstIntegration.DifferentiateLinear(position, prevPosition, dt); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float4 GetParticleVelocityAtPoint(float4 position, float4 prevPosition, quaternion orientation, quaternion prevOrientation, float4 point, float dt) + { + // calculate both linear and angular velocities: + float4 linearVelocity = BurstIntegration.DifferentiateLinear(position, prevPosition, dt); + float4 angularVelocity = BurstIntegration.DifferentiateAngular(orientation, prevOrientation, dt); + return linearVelocity + new float4(math.cross(angularVelocity.xyz, (point - prevPosition).xyz), 0); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float4 GetRigidbodyVelocityAtPoint(int rigidbodyIndex, + float4 point, + NativeArray rigidbodies, + NativeArray linearDeltas, + NativeArray angularDeltas, + BurstInertialFrame solverToWorld) + { + float4 linear = rigidbodies[rigidbodyIndex].velocity + linearDeltas[rigidbodyIndex]; + float4 angular = rigidbodies[rigidbodyIndex].angularVelocity + angularDeltas[rigidbodyIndex]; + 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); + + // 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, + BurstInertialFrame solverToWorld) + { + float4 linear = rigidbodies[rigidbodyIndex].velocity; + float4 angular = rigidbodies[rigidbodyIndex].angularVelocity; + 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.frame.InverseTransformVector(wsRigidbodyVelocity - wsSolverVelocity); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void ApplyImpulse(int rigidbodyIndex, + float4 impulse, + float4 point, + NativeArray rigidbodies, + NativeArray linearDeltas, + NativeArray angularDeltas, + BurstAffineTransform solverToWorld) + { + float4 impulseWS = solverToWorld.TransformVector(impulse); + float4 r = solverToWorld.TransformPoint(point) - rigidbodies[rigidbodyIndex].com; + + 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)] + public static void ApplyDeltaQuaternion(int rigidbodyIndex, + quaternion rotation, + quaternion delta, + NativeArray angularDeltas, + BurstAffineTransform solverToWorld, + float dt) + { + quaternion rotationWS = math.mul(solverToWorld.rotation, rotation); + quaternion deltaWS = math.mul(solverToWorld.rotation, delta); + + // convert quaternion delta to angular acceleration: + quaternion newRotation = math.normalize(new quaternion(rotationWS.value + deltaWS.value)); + AtomicAdd(angularDeltas, rigidbodyIndex, BurstIntegration.DifferentiateAngular(newRotation, rotationWS, dt)); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void OneSidedNormal(float4 forward, ref float4 normal) + { + float dot = math.dot(normal.xyz, forward.xyz); + if (dot < 0) normal -= 2 * dot * forward; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float EllipsoidRadius(float4 normSolverDirection, quaternion orientation, float3 radii) + { + float3 localDir = math.mul(math.conjugate(orientation), normSolverDirection.xyz); + float sqrNorm = math.lengthsq(localDir / radii); + return sqrNorm > epsilon ? math.sqrt(1 / sqrNorm) : radii.x; + } + + public static quaternion ExtractRotation(float4x4 matrix, quaternion rotation, int iterations) + { + 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.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 < epsilon) + break; + + rotation = math.normalize(math.mul(quaternion.AxisAngle((1.0f / w) * omega, w), rotation)); + } + return rotation; + } + + // decomposes a quaternion in swing and twist around a given axis: + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void SwingTwist(quaternion q, float3 twistAxis, out quaternion swing, out quaternion twist) + { + float dot = math.dot(q.value.xyz, twistAxis); + float3 p = twistAxis * dot; + twist = math.normalizesafe(new quaternion(p[0], p[1], p[2], q.value.w)); + swing = math.mul(q, math.conjugate(twist)); + } + + public static float4x4 toMatrix(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 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); + } + + 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) + { + return new float4x4(v.x, 0, 0, 0, + 0, v.y, 0, 0, + 0, 0, v.z, 0, + 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 float4 diagonal(this float4x4 value) + { + return new float4(value.c0[0], value.c1[1], value.c2[2], value.c3[3]); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float frobeniusNorm(this float4x4 m) + { + return math.sqrt(math.lengthsq(m.c0) + math.lengthsq(m.c1) + math.lengthsq(m.c2) + math.lengthsq(m.c3)); + } + + public static 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] < math.FLT_MIN_NORMAL) + { + V2 = V0.unitOrthogonal(); + } + else + { + V2 = EigenVector(D, S[2]); V2 -= V0 * math.dot(V0, V2); V2 = math.normalize(V2); + } + V1 = math.cross(V2, V0); + } + else + { + V2 = EigenVector(D, S[2]); + if (S[0] - S[1] < math.FLT_MIN_NORMAL) + { + V1 = V2.unitOrthogonal(); + } + else + { + V1 = EigenVector(D, S[1]); V1 -= V2 * math.dot(V2, V1); V1 = math.normalize(V1); + } + V0 = math.cross(V1, V2); + } + + V.c0 = V0; + V.c1 = V1; + V.c2 = V2; + } + + static float3 unitOrthogonal(this float3 input) + { + // Find a vector to cross() the input with. + if (!(input.x < input.z * epsilon) + || !(input.y < input.z * epsilon)) + { + float invnm = 1 / math.length(input.xy); + return new float3(-input.y * invnm, input.x * invnm, 0); + } + else + { + 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 + static float3 EigenVector(float3x3 D, float S) + { + // Compute a cofactor matrix of D - sI. + float3 c0 = D.c0; c0[0] -= S; + float3 c1 = D.c1; c1[1] -= S; + float3 c2 = D.c2; c2[2] -= S; + + // Upper triangular matrix + float3 c0p = new float3(c1[1] * c2[2] - c2[1] * c2[1], 0, 0); + float3 c1p = new float3(c2[1] * c2[0] - c1[0] * c2[2], c0[0] * c2[2] - c2[0] * c2[0], 0); + float3 c2p = new 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 = new 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.zero; + + // special case + if (norm[index] < math.FLT_MIN_NORMAL) + { + V[0] = 1; return V; + } + + 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 math.normalize(V); + } + + static float3 EigenValues(float3x3 D) + { + float one_third = 1 / 3.0f; + float one_sixth = 1 / 6.0f; + float three_sqrt = math.sqrt(3.0f); + + float3 c0 = D.c0; + float3 c1 = D.c1; + float3 c2 = D.c2; + + 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 = math.sqrt(p); + + float tmp = p * p * p - q * q; + float phi = one_third * math.atan2(math.sqrt(math.max(0, tmp)), q); + float phi_c = math.cos(phi); + float phi_s = math.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 float3(e2, e1, e0); + } + + public struct CachedTri + { + public float4 vertex; + public float4 edge0; + public float4 edge1; + public float4 data; + + public void Cache(float4 v1, + float4 v2, + float4 v3) + { + vertex = v1; + edge0 = v2 - v1; + edge1 = v3 - v1; + data = float4.zero; + data[0] = math.dot(edge0, edge0); + data[1] = math.dot(edge0, edge1); + 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) + { + float4 v0 = tri.vertex - p; + float b0 = math.dot(tri.edge0, v0); + float b1 = math.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 = new float4(1 - (t0 + t1), t0, t1,0); + return tri.vertex + t0 * tri.edge0 + t1 * tri.edge1; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float4 NearestPointOnEdge(float4 a, float4 b, float4 p, out float mu, bool clampToSegment = true) + { + float4 ap = p - a; + float4 ab = b - a; + + mu = math.dot(ap, ab) / math.dot(ab, ab); + + 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); + + if (clampToSegment) + mu = math.saturate(mu); + + return a + ab * mu; + } + + public static float4 NearestPointsTwoEdges(float4 a, float4 b, float4 c, float4 d, out float mu1, out float mu2) + { + float4 dc = d - c; + float lineDirSqrMag = math.dot(dc, dc); + float4 inPlaneA = a - (math.dot(a - c, dc) / lineDirSqrMag * dc); + float4 inPlaneB = b - (math.dot(b - c, dc) / lineDirSqrMag * dc); + + float4 inPlaneBA = inPlaneB - inPlaneA; + float t = math.dot(c - inPlaneA, inPlaneBA) / math.dot(inPlaneBA, inPlaneBA); + + //t = (inPlaneA != inPlaneB) ? t : 0f; // Zero's t if parallel + float4 segABtoLineCD = math.lerp(a, b, math.saturate(t)); + + float4 segCDtoSegAB = NearestPointOnEdge(c, d, segABtoLineCD, out mu1); + float4 segABtoSegCD = NearestPointOnEdge(a, b, segCDtoSegAB, out mu2); + + return segCDtoSegAB; + } + + public static float4 BaryCoords(in float4 A, + in float4 B, + in float4 C, + in float4 P) + { + + // Compute vectors + float4 v0 = C - A; + float4 v1 = B - A; + float4 v2 = P - A; + + // Compute dot products + float dot00 = math.dot(v0, v0); + float dot01 = math.dot(v0, v1); + float dot02 = math.dot(v0, v2); + float dot11 = math.dot(v1, v1); + float dot12 = math.dot(v1, v2); + + // Compute barycentric coordinates + float det = dot00 * dot11 - dot01 * dot01; + if (math.abs(det) > epsilon) + { + float u = (dot11 * dot02 - dot01 * dot12) / det; + float v = (dot00 * dot12 - dot01 * dot02) / det; + return new float4(1 - u - v, v, u, 0); + } + return float4.zero; + + } + + public static float4 BaryCoords2(in float4 A, + in float4 B, + in float4 P) + { + float4 v0 = P - A; + float4 v1 = B - A; + float y = math.sqrt(math.dot(v0, v0) / (math.dot(v1, v1) + epsilon)); + return new float4(1 - y, y, 0, 0); + } + + public static float4 BaryIntrpl(in float4 p1, in float4 p2, in float4 p3, in float4 coords) + { + return coords[0] * p1 + coords[1] * p2 + coords[2] * p3; + } + + public static float4 BaryIntrpl(in float4 p1, in float4 p2, in float4 coords) + { + return coords[0] * p1 + coords[1] * p2; + } + + public static float BaryIntrpl(float p1, float p2, float p3, float4 coords) + { + return coords[0] * p1 + coords[1] * p2 + coords[2] * p3; + } + + public static float BaryIntrpl(float p1, float p2, float4 coords) + { + return coords[0] * p1 + coords[1] * p2; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float BaryScale(float4 coords) + { + return 1.0f / math.dot(coords, coords); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float4 BarycenterForSimplexOfSize(int simplexSize) + { + float value = 1f / simplexSize; + float4 center = float4.zero; + for (int i = 0; i < simplexSize; ++i) + center[i] = value; + 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 + { +#if ENABLE_UNITY_COLLECTIONS_CHECKS + if ((uint)index >= (uint)list.Length) + { + throw new IndexOutOfRangeException( + $"Index {index} is out of range in NativeList of '{list.Length}' Length."); + } +#endif + + int elemSize = UnsafeUtility.SizeOf(); + byte* basePtr = (byte*)list.GetUnsafePtr(); + + UnsafeUtility.MemMove(basePtr + (index * elemSize), basePtr + ((index + count) * elemSize), elemSize * (list.Length - count - index)); + + // No easy way to change length so we just loop this unfortunately. + for (var i = 0; i < count; i++) + { + list.RemoveAtSwapBack(list.Length - 1); + } + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstMath.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstMath.cs.meta new file mode 100644 index 00000000..5b662b68 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/BurstMath.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1cc365339e47244d7b217576a7d95ca8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions.meta new file mode 100644 index 00000000..7f66f592 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 71085a94c3367475ab31b12e483c6479 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstBox.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstBox.cs new file mode 100644 index 00000000..44adb2fe --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstBox.cs @@ -0,0 +1,155 @@ +#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 + { + public BurstColliderShape shape; + public BurstAffineTransform colliderToSolver; + + public void Evaluate(float4 point, float4 radii, quaternion orientation, ref BurstLocalOptimization.SurfacePoint projectedPoint) + { + float4 center = shape.center * colliderToSolver.scale; + float4 size = shape.size * colliderToSolver.scale * 0.5f; + + // clamp the point to the surface of the box: + point = colliderToSolver.InverseTransformPointUnscaled(point) - center; + + if (shape.is2D) + point[2] = 0; + + // get minimum distance for each axis: + float4 distances = size - math.abs(point); + + if (distances.x >= 0 && distances.y >= 0 && distances.z >= 0) + { + // find minimum distance in all three axes and the axis index: + float min = float.MaxValue; + int axis = 0; + + for (int i = 0; i < 3; ++i) + { + if (distances[i] < min) + { + min = distances[i]; + axis = i; + } + } + + projectedPoint.normal = float4.zero; + projectedPoint.point = point; + + projectedPoint.normal[axis] = point[axis] > 0 ? 1 : -1; + projectedPoint.point[axis] = size[axis] * projectedPoint.normal[axis]; + } + else + { + projectedPoint.point = math.clamp(point, -size, size); + projectedPoint.normal = math.normalizesafe(point - projectedPoint.point); + } + + projectedPoint.point = colliderToSolver.TransformPointUnscaled(projectedPoint.point + center + projectedPoint.normal * shape.contactOffset); + projectedPoint.normal = colliderToSolver.TransformDirection(projectedPoint.normal); + } + + public static JobHandle GenerateContacts(ObiColliderWorld world, + BurstSolverImpl solver, + NativeList contactPairs, + NativeQueue contactQueue, + NativeArray contactOffsetsPerType, + float deltaTime, + JobHandle inputDeps) + { + int pairCount = contactOffsetsPerType[(int)Oni.ShapeType.Box + 1] - contactOffsetsPerType[(int)Oni.ShapeType.Box]; + if (pairCount == 0) return inputDeps; + + var job = new GenerateBoxContactsJob + { + 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.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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstBox.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstBox.cs.meta new file mode 100644 index 00000000..5a84d9cd --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstBox.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f09926d9bc8604475a3bce5e593165b4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstCapsule.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstCapsule.cs new file mode 100644 index 00000000..c66e8df3 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstCapsule.cs @@ -0,0 +1,136 @@ +#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 + { + public BurstColliderShape shape; + public BurstAffineTransform colliderToSolver; + + 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) + point[2] = 0; + + int direction = (int)shape.size.z; + float radius = shape.size.x * math.max(colliderToSolver.scale[(direction + 1) % 3], + colliderToSolver.scale[(direction + 2) % 3]); + + float height = math.max(radius, shape.size.y * 0.5f * colliderToSolver.scale[direction]); + float4 halfVector = float4.zero; + halfVector[direction] = height - radius; + + float4 centerLine = BurstMath.NearestPointOnEdge(-halfVector, halfVector, point, out float mu); + float4 centerToPoint = point - centerLine; + float distanceToCenter = math.length(centerToPoint); + + float4 normal = centerToPoint / (distanceToCenter + BurstMath.epsilon); + + projectedPoint.point = colliderToSolver.TransformPointUnscaled(center + centerLine + normal * (radius + shape.contactOffset)); + projectedPoint.normal = colliderToSolver.TransformDirection(normal); + } + + public static JobHandle GenerateContacts(ObiColliderWorld world, + BurstSolverImpl solver, + NativeList contactPairs, + NativeQueue contactQueue, + NativeArray contactOffsetsPerType, + float deltaTime, + JobHandle inputDeps) + { + int pairCount = contactOffsetsPerType[(int)Oni.ShapeType.Capsule + 1] - contactOffsetsPerType[(int)Oni.ShapeType.Capsule]; + if (pairCount == 0) return inputDeps; + + var job = new GenerateCapsuleContactsJob + { + 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.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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstCapsule.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstCapsule.cs.meta new file mode 100644 index 00000000..e75f1676 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstCapsule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 30a6f80040171467eb7e40b869d0aa44 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderShape.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderShape.cs new file mode 100644 index 00000000..88c580a4 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderShape.cs @@ -0,0 +1,41 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Mathematics; + +namespace Obi +{ + + public struct BurstColliderShape + { + public float4 center; + public 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.*/ + + public ColliderShape.ShapeType type; + public float contactOffset; + 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; // 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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderShape.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderShape.cs.meta new file mode 100644 index 00000000..362c07ae --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderShape.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 707535693276c450e8ba4504defa09eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderWorld.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderWorld.cs new file mode 100644 index 00000000..14a2a29f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderWorld.cs @@ -0,0 +1,625 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using UnityEngine; +using Unity.Collections; +using Unity.Jobs; +using Unity.Mathematics; +using Unity.Burst; +using System.Threading; +using Unity.Collections.LowLevel.Unsafe; + +namespace Obi +{ + + + public class BurstColliderWorld : MonoBehaviour, IColliderWorldImpl + { + struct MovingCollider + { + public BurstCellSpan oldSpan; + public BurstCellSpan newSpan; + public int entity; + } + + 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 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); + } + + public void OnDestroy() + { + ObiColliderWorld.GetInstance().UnregisterImplementation(this); + + grid.Dispose(); + movingColliders.Dispose(); + + colliderTypeCounts.Dispose(); + contactPairQueue.Dispose(); + contactPairs.Dispose(); + contactOffsetsPerType.Dispose(); + + colliderContactQueue.Dispose(); + + cellSpans.Dispose(); + } + + public void IncreaseReferenceCount() + { + referenceCount++; + } + public void DecreaseReferenceCount() + { + if (--referenceCount <= 0 && gameObject != null) + DestroyImmediate(gameObject); + } + + public void SetColliders(ObiNativeColliderShapeList shapes, ObiNativeAabbList bounds, ObiNativeAffineTransformList transforms) + { + colliderCount = shapes.count; + + // insert new empty cellspans at the end if needed: + while (colliderCount > cellSpans.count) + cellSpans.Add(new CellSpan(new VInt4(10000), new VInt4(10000))); + } + + public void SetRigidbodies(ObiNativeRigidbodyList rigidbody) + { + } + + public void SetForceZones(ObiNativeForceZoneList rigidbody) + { + } + + public void SetCollisionMaterials(ObiNativeCollisionMaterialList materials) + { + + } + + public void SetTriangleMeshData(ObiNativeTriangleMeshHeaderList headers, ObiNativeBIHNodeList nodes, ObiNativeTriangleList triangles, ObiNativeVector3List vertices) + { + } + + public void SetEdgeMeshData(ObiNativeEdgeMeshHeaderList headers, ObiNativeBIHNodeList nodes, ObiNativeEdgeList edges, ObiNativeVector2List vertices) + { + } + + public void SetDistanceFieldData(ObiNativeDistanceFieldHeaderList headers, ObiNativeDFNodeList nodes) { } + public void SetHeightFieldData(ObiNativeHeightFieldHeaderList headers, ObiNativeFloatList samples) { } + + public void UpdateWorld(float deltaTime) + { + var world = ObiColliderWorld.GetInstance(); + + var identifyMoving = new IdentifyMovingColliders + { + movingColliders = movingColliders.AsParallelWriter(), + shapes = world.colliderShapes.AsNativeArray(cellSpans.count), + rigidbodies = world.rigidbodies.AsNativeArray(), + collisionMaterials = world.collisionMaterials.AsNativeArray(), + bounds = world.colliderAabbs.AsNativeArray(cellSpans.count), + cellIndices = cellSpans.AsNativeArray(), + colliderCount = colliderCount, + dt = deltaTime + }; + JobHandle movingHandle = identifyMoving.Schedule(cellSpans.count, 128); + + var updateMoving = new UpdateMovingColliders + { + movingColliders = movingColliders, + grid = grid, + colliderCount = colliderCount + }; + + updateMoving.Schedule(movingHandle).Complete(); + + // remove tail from the current spans array: + if (colliderCount < cellSpans.count) + cellSpans.count -= cellSpans.count - colliderCount; + } + + [BurstCompile] + struct IdentifyMovingColliders : IJobParallelFor + { + [WriteOnly] + [NativeDisableParallelForRestriction] + public NativeQueue.ParallelWriter movingColliders; + + [ReadOnly] public NativeArray shapes; + [ReadOnly] public NativeArray rigidbodies; + [ReadOnly] public NativeArray collisionMaterials; + public NativeArray bounds; + + public NativeArray cellIndices; + [ReadOnly] public int colliderCount; + [ReadOnly] public float dt; + + // Iterate over all colliders and store those whose cell span has changed. + public void Execute(int i) + { + BurstAabb velocityBounds = bounds[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) + velocityBounds.Sweep(rigidbodies[rb].velocity * dt); + + // Expand bounds by collision material's stick distance: + if (shapes[i].materialIndex >= 0) + velocityBounds.Expand(collisionMaterials[shapes[i].materialIndex].stickDistance); + + float size = velocityBounds.AverageAxisLength(); + int level = NativeMultilevelGrid.GridLevelForSize(size); + float cellSize = NativeMultilevelGrid.CellSizeOfLevel(level); + + // get new collider bounds cell coordinates: + BurstCellSpan newSpan = new BurstCellSpan(new int4(GridHash.Quantize(velocityBounds.min.xyz, cellSize), level), + 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) + { + newSpan.min[2] = 0; + newSpan.max[2] = 0; + } + + // if the collider is at the tail (removed), we will only remove it from its current cellspan. + // if the new cellspan and the current one are different, we must remove it from its current cellspan and add it to its new one. + if (i >= colliderCount || cellIndices[i] != newSpan) + { + // Add the collider to the list of moving colliders: + movingColliders.Enqueue(new MovingCollider + { + oldSpan = cellIndices[i], + newSpan = newSpan, + entity = i + }); + + // Update previous coords: + cellIndices[i] = newSpan; + } + + } + } + + [BurstCompile] + struct UpdateMovingColliders : IJob + { + public NativeQueue movingColliders; + public NativeMultilevelGrid grid; + [ReadOnly] public int colliderCount; + + public void Execute() + { + while (movingColliders.Count > 0) + { + MovingCollider movingCollider = movingColliders.Dequeue(); + + // remove from old cells: + grid.RemoveFromCells(movingCollider.oldSpan, movingCollider.entity); + + // insert in new cells, as long as the index is below the amount of colliders. + // otherwise, the collider is at the "tail" and there's no need to add it back. + if (movingCollider.entity < colliderCount) + grid.AddToCells(movingCollider.newSpan, movingCollider.entity); + } + + // remove all empty cells from the grid: + grid.RemoveEmpty(); + } + } + + [BurstCompile] + unsafe struct GenerateContactsJob : IJobParallelFor + { + //collider grid: + [ReadOnly] public NativeMultilevelGrid colliderGrid; + + [DeallocateOnJobCompletion] + [ReadOnly] public NativeArray gridLevels; + + // particle arrays: + [ReadOnly] public NativeArray velocities; + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray orientations; + [ReadOnly] public NativeArray invMasses; + [ReadOnly] public NativeArray radii; + [ReadOnly] public NativeArray filters; + [ReadOnly] public NativeArray particleMaterialIndices; + + // 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 collisionMaterials; + [ReadOnly] public NativeArray rigidbodies; + [ReadOnly] public NativeArray bounds; + + [WriteOnly] + [NativeDisableParallelForRestriction] + public NativeQueue.ParallelWriter contactPairQueue; + + [NativeDisableParallelForRestriction] + public NativeArray colliderTypeCounts; + + // auxiliar data: + [ReadOnly] public BurstAffineTransform solverToWorld; + [ReadOnly] public float deltaTime; + [ReadOnly] public Oni.SolverParameters parameters; + + public void Execute(int i) + { + int simplexStart = simplexCounts.GetSimplexStartAndSize(i, out int simplexSize); + + // get all colliders overlapped by the cell bounds, in all grid levels: + BurstAabb simplexBoundsWS = simplexBounds[i].Transformed(solverToWorld); + NativeList candidates = new NativeList(16,Allocator.Temp); + + // max size of the simplex bounds in cells: + int3 maxSize = new int3(10); + bool is2D = parameters.mode == Oni.SolverParameters.Mode.Mode2D; + + for (int l = 0; l < gridLevels.Length; ++l) + { + float cellSize = NativeMultilevelGrid.CellSizeOfLevel(gridLevels[l]); + + int3 minCell = GridHash.Quantize(simplexBoundsWS.min.xyz, cellSize); + int3 maxCell = GridHash.Quantize(simplexBoundsWS.max.xyz, cellSize); + maxCell = minCell + math.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 (is2D) + { + if (colliderGrid.TryGetCellIndex(new int4(x, y, 0, gridLevels[l]), out int cellIndex)) + { + var colliderCell = colliderGrid.usedCells[cellIndex]; + candidates.AddRange(colliderCell.ContentsPointer, colliderCell.Length); + } + } + + for (int z = minCell[2]; z <= maxCell[2]; ++z) + { + if (colliderGrid.TryGetCellIndex(new int4(x, y, z, gridLevels[l]), out int cellIndex)) + { + var colliderCell = colliderGrid.usedCells[cellIndex]; + candidates.AddRange(colliderCell.ContentsPointer, colliderCell.Length); + } + } + } + } + } + + if (candidates.Length > 0) + { + // make sure each candidate collider only shows up once in the array: + NativeArray uniqueCandidates = candidates.AsArray(); + uniqueCandidates.Sort(); + int uniqueCount = uniqueCandidates.Unique(); + + // iterate over candidate colliders, generating contacts for each one + for (int k = 0; k < uniqueCount; ++k) + { + int c = uniqueCandidates[k]; + if (c < shapes.Length) + { + BurstColliderShape shape = shapes[c]; + BurstAabb colliderBoundsWS = bounds[c]; + int rb = shape.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 (shape.materialIndex >= 0) + colliderBoundsWS.Expand(collisionMaterials[shape.materialIndex].stickDistance); + + // check if any simplex particle and the collider should collide: + bool shouldCollide = false; + var colliderCategory = shape.filter & ObiUtils.FilterCategoryBitmask; + var colliderMask = (shape.filter & ObiUtils.FilterMaskBitmask) >> 16; + for (int j = 0; j < simplexSize; ++j) + { + var simplexCategory = filters[simplices[simplexStart + j]] & ObiUtils.FilterCategoryBitmask; + var simplexMask = (filters[simplices[simplexStart + j]] & ObiUtils.FilterMaskBitmask) >> 16; + shouldCollide |= (simplexCategory & colliderMask) != 0 && (simplexMask & colliderCategory) != 0; + } + + if (shouldCollide && simplexBoundsWS.IntersectsAabb(in colliderBoundsWS, is2D)) + { + // 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 + }); + } + } + } + } + } + } + + [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 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]; + + if (invMasses[particleIndex] > 0) + { + 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; + + // 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; + } + + 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, + + 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) + { + var world = ObiColliderWorld.GetInstance(); + + var generateColliderContactsJob = new GenerateContactsJob + { + colliderGrid = grid, + gridLevels = grid.populatedLevels.GetKeyArray(Allocator.TempJob), + + positions = solver.positions, + orientations = solver.orientations, + velocities = solver.velocities, + invMasses = solver.invMasses, + radii = solver.principalRadii, + filters = solver.filters, + particleMaterialIndices = solver.collisionMaterials, + + simplices = solver.simplices, + simplexCounts = solver.simplexCounts, + simplexBounds = solver.simplexBounds, + + transforms = world.colliderTransforms.AsNativeArray(), + shapes = world.colliderShapes.AsNativeArray(), + rigidbodies = world.rigidbodies.AsNativeArray(), + collisionMaterials = world.collisionMaterials.AsNativeArray(), + bounds = world.colliderAabbs.AsNativeArray(), + + contactPairQueue = contactPairQueue.AsParallelWriter(), + colliderTypeCounts = colliderTypeCounts, + + solverToWorld = solver.solverToWorld, + deltaTime = deltaTime, + parameters = solver.abstraction.parameters + }; + + 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 diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderWorld.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderWorld.cs.meta new file mode 100644 index 00000000..8c04e4b6 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderWorld.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f1a161c4294214a4fbcb7e9e94800494 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDFNode.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDFNode.cs new file mode 100644 index 00000000..f4d7a54a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDFNode.cs @@ -0,0 +1,65 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; +using System.Runtime.InteropServices; +using UnityEngine; +using Unity.Mathematics; + +namespace Obi +{ + public struct BurstDFNode + { + public float4 distancesA; + public float4 distancesB; + public float4 center; + public int firstChild; + + // add 12 bytes of padding to ensure correct memory alignment: + private int pad0; + private int pad1; + private int pad2; + + public 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 distance = 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 new float4(x1 - x0, y1 - y0, y[1] - y[0], distance); + + } + + public float4 GetNormalizedPos(float4 position) + { + float4 corner = center - new float4(center[3]); + return (position - corner) / (center[3] * 2); + } + + public 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; + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDFNode.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDFNode.cs.meta new file mode 100644 index 00000000..3ab35ee4 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDFNode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b5a1060edd11d4d268313295cdfe778b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDistanceField.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDistanceField.cs new file mode 100644 index 00000000..1ebf5c04 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDistanceField.cs @@ -0,0 +1,188 @@ +#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 + { + public BurstColliderShape shape; + public BurstAffineTransform colliderToSolver; + + public NativeArray distanceFieldHeaders; + public NativeArray dfNodes; + + public void Evaluate(float4 point, float4 radii, quaternion orientation, ref BurstLocalOptimization.SurfacePoint projectedPoint) + { + point = colliderToSolver.InverseTransformPoint(point); + + if (shape.is2D) + point[2] = 0; + + var header = distanceFieldHeaders[shape.dataIndex]; + 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); + } + + private float4 DFTraverse(float4 particlePosition, in DistanceFieldHeader header) + { + 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 + }; + + + float4 simplexBary = BurstMath.BarycenterForSimplexOfSize(simplexSize); + 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; + for (int j = 0; j < simplexSize; ++j) + { + 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 + shapes[colliderIndex].contactOffset + parameters.collisionMargin) + contactsQueue.Enqueue(new BurstContact + { + bodyA = simplexIndex, + bodyB = colliderIndex, + pointA = simplexBary, + pointB = colliderPoint.point, + normal = colliderPoint.normal * dfShape.shape.sign + }); + } + } + +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDistanceField.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDistanceField.cs.meta new file mode 100644 index 00000000..3d220582 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDistanceField.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 965f98194011e4cd9b8c1400b59565d8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstEdgeMesh.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstEdgeMesh.cs new file mode 100644 index 00000000..75488777 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstEdgeMesh.cs @@ -0,0 +1,211 @@ +#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 + { + + public BurstColliderShape shape; + public BurstAffineTransform colliderToSolver; + public int dataOffset; + + public EdgeMeshHeader header; + public NativeArray edgeBihNodes; + public NativeArray edges; + public NativeArray vertices; + + public void Evaluate(float4 point, float4 radii, quaternion orientation, ref BurstLocalOptimization.SurfacePoint projectedPoint) + { + point = colliderToSolver.InverseTransformPointUnscaled(point); + + if (shape.is2D) + point[2] = 0; + + Edge t = edges[header.firstEdge + dataOffset]; + 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); + + projectedPoint.normal = colliderToSolver.TransformDirection(normal); + projectedPoint.point = colliderToSolver.TransformPointUnscaled(nearestPoint + normal * shape.contactOffset); + } + + public static JobHandle GenerateContacts(ObiColliderWorld world, + BurstSolverImpl solver, + NativeList contactPairs, + NativeQueue contactQueue, + NativeArray contactOffsetsPerType, + float deltaTime, + JobHandle inputDeps) + { + int pairCount = contactOffsetsPerType[(int)Oni.ShapeType.EdgeMesh + 1] - contactOffsetsPerType[(int)Oni.ShapeType.EdgeMesh]; + if (pairCount == 0) return inputDeps; + + 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; + } + } + + [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) + { + int simplexIndex = contactPairs[firstPair + i].bodyA; + int colliderIndex = contactPairs[firstPair + i].bodyB; + var shape = shapes[colliderIndex]; + + if (shape.dataIndex < 0) + return; + + 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() + { + 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) + { + // 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 = 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); + + if (edgeBounds.IntersectsAabb(simplexBoundsCS, shape.is2D)) + { + float4 simplexBary = BurstMath.BarycenterForSimplexOfSize(simplexSize); + + edgeMeshShape.dataOffset = dataOffset; + var colliderPoint = BurstLocalOptimization.Optimize(ref edgeMeshShape, positions, orientations, radii, simplices, simplexStart, simplexSize, + ref simplexBary, out float4 convexPoint, parameters.surfaceCollisionIterations, parameters.surfaceCollisionTolerance); + + 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); + } + } + } + } + +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstEdgeMesh.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstEdgeMesh.cs.meta new file mode 100644 index 00000000..bda2d5b6 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstEdgeMesh.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 91bd73e80795e494292d0b2fbf2e5e7f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstHeightField.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstHeightField.cs new file mode 100644 index 00000000..32151032 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstHeightField.cs @@ -0,0 +1,273 @@ +#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 + { + public BurstColliderShape shape; + public BurstAffineTransform colliderToSolver; + + public BurstMath.CachedTri tri; + public float4 triNormal; + + public HeightFieldHeader header; + public NativeArray heightFieldSamples; + + public void Evaluate(float4 point, float4 radii, quaternion orientation, ref BurstLocalOptimization.SurfacePoint projectedPoint) + { + point = colliderToSolver.InverseTransformPoint(point); + + 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) + //BurstMath.OneSidedNormal(triNormal, ref normal); + + projectedPoint.point = colliderToSolver.TransformPoint(nearestPoint + normal * shape.contactOffset); + projectedPoint.normal = colliderToSolver.TransformDirection(normal); + } + + public static JobHandle GenerateContacts(ObiColliderWorld world, + BurstSolverImpl solver, + NativeList contactPairs, + NativeQueue contactQueue, + NativeArray contactOffsetsPerType, + float deltaTime, + JobHandle inputDeps) + { + int pairCount = contactOffsetsPerType[(int)Oni.ShapeType.Heightmap + 1] - contactOffsetsPerType[(int)Oni.ShapeType.Heightmap]; + if (pairCount == 0) return inputDeps; + + var job = new GenerateHeightFieldContactsJob + { + 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(), + + 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; + + // calculate terrain cell size: + float cellWidth = shape.size.x / (resolutionU - 1); + float cellHeight = shape.size.z / (resolutionV - 1); + + // calculate particle bounds min/max cells: + 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) + { + 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 = math.clamp(su + 1, 0, resolutionU - 1); + int csv1 = math.clamp(sv + 1, 0, resolutionV - 1); + + // sample heights: + float h1 = heightFieldSamples[header.firstSample + sv * resolutionU + su] * shape.size.y; + float h2 = heightFieldSamples[header.firstSample + sv * resolutionU + csu1] * shape.size.y; + float h3 = heightFieldSamples[header.firstSample + csv1 * resolutionU + su] * shape.size.y; + float h4 = heightFieldSamples[header.firstSample + csv1 * resolutionU + csu1] * shape.size.y; + + if (h1 < 0) continue; + h1 = math.abs(h1); + h2 = math.abs(h2); + h3 = math.abs(h3); + h4 = math.abs(h4); + + float min_x = su * shape.size.x / (resolutionU - 1); + float max_x = csu1 * shape.size.x / (resolutionU - 1); + float min_z = sv * shape.size.z / (resolutionV - 1); + float max_z = csv1 * shape.size.z / (resolutionV - 1); + + float4 convexPoint; + float4 simplexBary = BurstMath.BarycenterForSimplexOfSize(simplexSize); + + // ------contact against the first triangle------: + float4 v1 = new float4(min_x, h3, max_z, 0); + float4 v2 = new float4(max_x, h4, max_z, 0); + float4 v3 = new float4(min_x, h1, min_z, 0); + + triangleMeshShape.tri.Cache(v1, v2, v3); + triNormal.xyz = math.normalizesafe(math.cross((v2 - v1).xyz, (v3 - v1).xyz)); + + 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; + for (int j = 0; j < simplexSize; ++j) + { + 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(convexPoint - colliderPoint.point, colliderPoint.normal); + float vel = math.dot(velocity - rbVelocity, colliderPoint.normal); + + if (vel * deltaTime + dAB <= simplexRadius + shape.contactOffset + parameters.collisionMargin) + { + co.pointB = colliderPoint.point; + co.normal = colliderPoint.normal * triangleMeshShape.shape.sign; + co.pointA = simplexBary; + contactsQueue.Enqueue(co); + } + + // ------contact against the second triangle------: + v1 = new float4(min_x, h1, min_z, 0); + v2 = new float4(max_x, h4, max_z, 0); + v3 = new float4(max_x, h2, min_z, 0); + + triangleMeshShape.tri.Cache(v1, v2, v3); + triNormal.xyz = math.normalizesafe(math.cross((v2 - v1).xyz, (v3 - v1).xyz)); + + colliderPoint = BurstLocalOptimization.Optimize(ref triangleMeshShape, positions, orientations, radii, simplices, simplexStart, simplexSize, + ref simplexBary, out convexPoint, parameters.surfaceCollisionIterations, parameters.surfaceCollisionTolerance); + + velocity = float4.zero; + simplexRadius = 0; + for (int j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + simplexRadius += radii[particleIndex].x * simplexBary[j]; + velocity += velocities[particleIndex] * simplexBary[j]; + } + + rbVelocity = float4.zero; + if (rigidbodyIndex >= 0) + rbVelocity = BurstMath.GetRigidbodyVelocityAtPoint(rigidbodyIndex, colliderPoint.point, rigidbodies, solverToWorld); + + dAB = math.dot(convexPoint - colliderPoint.point, colliderPoint.normal); + vel = math.dot(velocity - rbVelocity, colliderPoint.normal); + + if (vel * deltaTime + dAB <= simplexRadius + shape.contactOffset + parameters.collisionMargin) + { + co.pointB = colliderPoint.point; + co.normal = colliderPoint.normal * triangleMeshShape.shape.sign; + co.pointA = simplexBary; + + contactsQueue.Enqueue(co); + } + } + } + } + } + } + } + +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstHeightField.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstHeightField.cs.meta new file mode 100644 index 00000000..a4815254 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstHeightField.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 780062b6393e3476e947fb10fc9b4f3d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstLocalOptimization.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstLocalOptimization.cs new file mode 100644 index 00000000..16da88c4 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstLocalOptimization.cs @@ -0,0 +1,207 @@ +#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; + +namespace Obi +{ + public static class BurstLocalOptimization + { + + /** + * point in the surface of a signed distance field. + */ + public struct SurfacePoint + { + public float4 bary; + public float4 point; + public float4 normal; + } + + public interface IDistanceFunction + { + void Evaluate(float4 point, float4 radii, quaternion orientation, ref SurfacePoint projectedPoint); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void GetInterpolatedSimplexData(int simplexStart, + int simplexSize, + NativeArray simplices, + NativeArray positions, + NativeArray orientations, + NativeArray radii, + float4 convexBary, + out float4 convexPoint, + out float4 convexRadii, + out quaternion convexOrientation) + { + convexPoint = float4.zero; + convexRadii = float4.zero; + convexOrientation = new 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.value += orientations[particle].value * convexBary[j]; + } + convexPoint.w = 0; + } + + public static SurfacePoint Optimize(ref T function, + NativeArray positions, + NativeArray orientations, + NativeArray radii, + NativeArray simplices, + int simplexStart, + int simplexSize, + ref float4 convexBary, + out float4 convexPoint, + int maxIterations = 16, + float tolerance = 0.004f) where T : struct, IDistanceFunction + { + var pointInFunction = new SurfacePoint(); + + // get cartesian coordinates of the initial guess: + GetInterpolatedSimplexData(simplexStart, simplexSize, simplices, positions, orientations, radii, convexBary, out convexPoint, out float4 convexThickness, out quaternion convexOrientation); + + // for a 0-simplex (point), perform a single evaluation: + if (simplexSize == 1 || maxIterations < 1) + function.Evaluate(convexPoint, convexThickness, convexOrientation, ref 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(ref function, simplexStart, simplexSize, positions, orientations, radii, simplices, ref convexPoint, ref convexThickness, ref convexOrientation, ref convexBary, ref pointInFunction, maxIterations, tolerance); + + return pointInFunction; + } + + // Frank-Wolfe convex optimization algorithm. Returns closest point to a simplex in a signed distance function. + private static void FrankWolfe(ref T function, + int simplexStart, + int simplexSize, + NativeArray positions, + NativeArray orientations, + NativeArray radii, + NativeArray simplices, + ref float4 convexPoint, + ref float4 convexThickness, + ref quaternion convexOrientation, + ref float4 convexBary, + ref SurfacePoint pointInFunction, + int maxIterations, + float tolerance) where T : struct, IDistanceFunction + { + for (int i = 0; i < maxIterations; ++i) + { + // sample target function: + function.Evaluate(convexPoint, convexThickness, convexOrientation, ref pointInFunction); + + // find descent direction: + int descent = 0; + float gap = float.MinValue; + 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 = math.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 step = 0.3f * 2.0f / (i + 2); + convexBary *= 1 - step; + convexBary[descent] += step; + + // get cartesian coordinates of current solution: + GetInterpolatedSimplexData(simplexStart, simplexSize, simplices, positions, orientations, radii, convexBary, out convexPoint, out convexThickness, out convexOrientation); + } + } + + private static void GoldenSearch(ref T function, + int simplexStart, + int simplexSize, + NativeArray positions, + NativeArray orientations, + NativeArray radii, + NativeArray simplices, + ref float4 convexPoint, + ref float4 convexThickness, + ref quaternion convexOrientation, + ref float4 convexBary, + ref SurfacePoint pointInFunction, + int maxIterations, + float tolerance) where T : struct, IDistanceFunction + { + var pointInFunctionD = new SurfacePoint(); + float4 convexPointD, convexThicknessD; + quaternion convexOrientationD; + + float gr = (math.sqrt(5.0f) + 1) / 2.0f; + float u = 0, v = 1; + float c = v - (v - u) / gr; + float d = u + (v - u) / gr; + + for (int i = 0; i < maxIterations; ++i) + { + // if the gap is below tolerance threshold, stop iterating. + if (math.abs(v - u) < tolerance * (math.abs(c) + math.abs(d))) + break; + + GetInterpolatedSimplexData(simplexStart, simplexSize, simplices, positions, orientations, radii, new float4(c, 1 - c, 0, 0), out convexPoint, out convexThickness, out convexOrientation); + GetInterpolatedSimplexData(simplexStart, simplexSize, simplices, positions, orientations, radii, new float4(d, 1 - d, 0, 0), out convexPointD, out convexThicknessD, out convexOrientationD); + + function.Evaluate(convexPoint, convexThickness, convexOrientation, ref pointInFunction); + function.Evaluate(convexPointD, convexThicknessD, convexOrientationD, ref pointInFunctionD); + + 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); + + if (math.dot(-pointInFunction.normal, candidateC) < math.dot(-pointInFunctionD.normal, candidateD)) + v = d; + else + u = c; + + c = v - (v - u) / gr; + d = u + (v - u) / gr; + } + + float mid = (v + u) * 0.5f; + convexBary.x = mid; + convexBary.y = (1 - mid); + GetInterpolatedSimplexData(simplexStart, simplexSize, simplices, positions, orientations, radii, convexBary, out convexPoint, out convexThickness, out convexOrientation); + function.Evaluate(convexPoint, convexThickness, convexOrientation, ref pointInFunction); + } + + + } + +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstLocalOptimization.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstLocalOptimization.cs.meta new file mode 100644 index 00000000..364d3fc9 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstLocalOptimization.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e0353c4eae8ca4ec78f2db34845cd5cd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSimplex.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSimplex.cs new file mode 100644 index 00000000..d042894d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSimplex.cs @@ -0,0 +1,65 @@ +#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; + +namespace Obi +{ + public struct BurstSimplex : BurstLocalOptimization.IDistanceFunction + { + public NativeArray positions; + public NativeArray radii; + public NativeArray simplices; + + public int simplexStart; + public int simplexSize; + + private BurstMath.CachedTri tri; + + public void CacheData() + { + if (simplexSize == 3) + { + 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)); + } + } + + public void Evaluate(float4 point, float4 radii, quaternion orientation, ref BurstLocalOptimization.SurfacePoint projectedPoint) + { + switch (simplexSize) + { + case 1: + default: + { + 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]]; 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]; + + }break; + case 3: + projectedPoint.point = BurstMath.NearestPointOnTri(tri, point, out projectedPoint.bary); + break; + } + + projectedPoint.normal = math.normalizesafe(point - projectedPoint.point); + } + + } + +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSimplex.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSimplex.cs.meta new file mode 100644 index 00000000..31e49b57 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSimplex.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d84f433832a8c4a90ba92ac471d18e44 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSphere.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSphere.cs new file mode 100644 index 00000000..cd5b297f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSphere.cs @@ -0,0 +1,127 @@ +#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 + { + public BurstColliderShape shape; + public BurstAffineTransform colliderToSolver; + + 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) + point[2] = 0; + + float radius = shape.size.x * math.cmax(colliderToSolver.scale.xyz); + float distanceToCenter = math.length(point); + + float4 normal = point / (distanceToCenter + BurstMath.epsilon); + + projectedPoint.point = colliderToSolver.TransformPointUnscaled(center + normal * (radius + shape.contactOffset)); + projectedPoint.normal = colliderToSolver.TransformDirection(normal); + } + + public static JobHandle GenerateContacts(ObiColliderWorld world, + BurstSolverImpl solver, + NativeList contactPairs, + NativeQueue contactQueue, + NativeArray contactOffsetsPerType, + float deltaTime, + JobHandle inputDeps) + { + 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); + + 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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSphere.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSphere.cs.meta new file mode 100644 index 00000000..5417774c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSphere.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38081dcc3e28a4a3dba1e8e5d042a262 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstTriangleMesh.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstTriangleMesh.cs new file mode 100644 index 00000000..6ef8be0b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstTriangleMesh.cs @@ -0,0 +1,220 @@ +#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 + { + public BurstColliderShape shape; + public BurstAffineTransform colliderToSolver; + + public BurstMath.CachedTri tri; + + public void Evaluate(float4 point, float4 radii, quaternion orientation, ref BurstLocalOptimization.SurfacePoint projectedPoint) + { + point = colliderToSolver.InverseTransformPointUnscaled(point); + + if (shape.is2D) + point[2] = 0; + + float4 nearestPoint = BurstMath.NearestPointOnTri(tri, point, out float4 bary); + float4 normal = math.normalizesafe(point - nearestPoint); + + projectedPoint.point = colliderToSolver.TransformPointUnscaled(nearestPoint + normal * shape.contactOffset); + projectedPoint.normal = colliderToSolver.TransformDirection(normal); + } + + 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; + + var job = new GenerateTriangleMeshContactsJob + { + 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) + { + // 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 = 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); + + if (triangleBounds.IntersectsAabb(simplexBoundsCS, shape.is2D)) + { + float4 simplexBary = BurstMath.BarycenterForSimplexOfSize(simplexSize); + + triangleMeshShape.tri.Cache(v1 * colliderToSolver.scale, v2 * colliderToSolver.scale, v3 * colliderToSolver.scale); + + var colliderPoint = BurstLocalOptimization.Optimize(ref triangleMeshShape, positions, orientations, radii, simplices, simplexStart, simplexSize, + ref simplexBary, out float4 simplexPoint, parameters.surfaceCollisionIterations, parameters.surfaceCollisionTolerance); + + float4 velocity = float4.zero; + float simplexRadius = 0; + for (int j = 0; j < simplexSize; ++j) + { + 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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstTriangleMesh.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstTriangleMesh.cs.meta new file mode 100644 index 00000000..df2751d2 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstTriangleMesh.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a65b8b437c2548c0b04b7ddb58a3970 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints.meta new file mode 100644 index 00000000..eadb4408 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f2aff1726dad4479cb41e9f94e28473f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics.meta new file mode 100644 index 00000000..fc5587ed --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b4c2af25bbe8a4c44941ea5486c18f71 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraints.cs new file mode 100644 index 00000000..9f54797c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraints.cs @@ -0,0 +1,26 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; + +namespace Obi +{ + public class BurstAerodynamicConstraints : BurstConstraintsImpl + { + public BurstAerodynamicConstraints(BurstSolverImpl solver) : base(solver, Oni.ConstraintType.Aerodynamics) + { + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new BurstAerodynamicConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as BurstAerodynamicConstraintsBatch); + batch.Destroy(); + } + } +} +#endif diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraints.cs.meta new file mode 100644 index 00000000..d1acf22e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 64e54848bb85248c8b0c31991ef094e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraintsBatch.cs new file mode 100644 index 00000000..abbf5ec6 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraintsBatch.cs @@ -0,0 +1,112 @@ +#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 +{ + public class BurstAerodynamicConstraintsBatch : BurstConstraintsBatchImpl, IAerodynamicConstraintsBatchImpl + { + private NativeArray aerodynamicCoeffs; + + public BurstAerodynamicConstraintsBatch(BurstAerodynamicConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.Aerodynamics; + } + + public void SetAerodynamicConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList aerodynamicCoeffs, int count) + { + this.particleIndices = particleIndices.AsNativeArray(); + this.aerodynamicCoeffs = aerodynamicCoeffs.AsNativeArray(); + m_ConstraintCount = count; + } + + public override JobHandle Initialize(JobHandle inputDeps, float substepTime) + { + return inputDeps; + } + + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) + { + var projectConstraints = new AerodynamicConstraintsBatchJob() + { + particleIndices = particleIndices, + aerodynamicCoeffs = aerodynamicCoeffs, + positions = solverImplementation.positions, + velocities = solverImplementation.velocities, + normals = solverImplementation.normals, + wind = solverImplementation.wind, + invMasses = solverImplementation.invMasses, + deltaTime = substepTime + }; + + return projectConstraints.Schedule(m_ConstraintCount, 32, inputDeps); + } + + public override JobHandle Apply(JobHandle inputDeps, float substepTime) + { + return inputDeps; + } + + [BurstCompile] + public struct AerodynamicConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] [NativeDisableParallelForRestriction] public NativeArray aerodynamicCoeffs; + + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray normals; + [ReadOnly] public NativeArray wind; + [ReadOnly] public NativeArray invMasses; + + [NativeDisableContainerSafetyRestriction] + public NativeArray velocities; + + [ReadOnly] public float deltaTime; + + public void Execute(int i) + { + 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 = math.lengthsq(relVelocity); + + if (rvSqrMag < BurstMath.epsilon) + return; + + float4 rvNorm = relVelocity / math.sqrt(rvSqrMag); + + // calculate surface normal (always facing wind) + float4 surfNormal = normals[p] * math.sign(math.dot(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 = math.dot(surfNormal,rvNorm); + + float3 liftDirection = math.normalizesafe(math.cross(math.cross(surfNormal.xyz, rvNorm.xyz), rvNorm.xyz)); + + //drag: + velocities[p] += (-dragCoeff * rvNorm + + + // lift: + liftCoeff * new float4(liftDirection.xyz,0)) * + + // scale + attackAngle * math.min(aerodynamicFactor * invMasses[p] * deltaTime, 1000); + } + } + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraintsBatch.cs.meta new file mode 100644 index 00000000..727a13f4 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e9db1828d66ec4f65aa37304663982af +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend.meta new file mode 100644 index 00000000..844ecb4d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 93818b1e63d1143c580b09480a2c0a1c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraints.cs new file mode 100644 index 00000000..38ba785c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraints.cs @@ -0,0 +1,26 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; + +namespace Obi +{ + public class BurstBendConstraints : BurstConstraintsImpl + { + public BurstBendConstraints(BurstSolverImpl solver) : base(solver, Oni.ConstraintType.Bending) + { + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new BurstBendConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as BurstBendConstraintsBatch); + batch.Destroy(); + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraints.cs.meta new file mode 100644 index 00000000..621fd064 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6c5e3cbf9187d4d39a1bc1a2e2386b00 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraintsBatch.cs new file mode 100644 index 00000000..18997515 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraintsBatch.cs @@ -0,0 +1,168 @@ +#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 +{ + public class BurstBendConstraintsBatch : BurstConstraintsBatchImpl, IBendConstraintsBatchImpl + { + private NativeArray restBends; + private NativeArray stiffnesses; + private NativeArray plasticity; + + BendConstraintsBatchJob projectConstraints; + ApplyBendConstraintsBatchJob applyConstraints; + + public BurstBendConstraintsBatch(BurstBendConstraints 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.AsNativeArray(); + this.restBends = restBends.AsNativeArray(); + this.stiffnesses = bendingStiffnesses.AsNativeArray(); + this.plasticity = plasticity.AsNativeArray(); + this.lambdas = lambdas.AsNativeArray(); + m_ConstraintCount = count; + + projectConstraints.particleIndices = this.particleIndices; + projectConstraints.restBends = this.restBends; + projectConstraints.stiffnesses = this.stiffnesses; + projectConstraints.plasticity = this.plasticity; + projectConstraints.lambdas = this.lambdas; + + applyConstraints.particleIndices = this.particleIndices; + } + + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) + { + projectConstraints.positions = solverImplementation.positions; + projectConstraints.invMasses = solverImplementation.invMasses; + projectConstraints.deltas = solverImplementation.positionDeltas; + projectConstraints.counts = solverImplementation.positionConstraintCounts; + projectConstraints.deltaTime = substepTime; + + return projectConstraints.Schedule(m_ConstraintCount, 32, inputDeps); + } + + public override JobHandle Apply(JobHandle inputDeps, float substepTime) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + applyConstraints.positions = solverImplementation.positions; + applyConstraints.deltas = solverImplementation.positionDeltas; + applyConstraints.counts = solverImplementation.positionConstraintCounts; + applyConstraints.sorFactor = parameters.SORFactor; + + return applyConstraints.Schedule(m_ConstraintCount, 64, inputDeps); + } + + [BurstCompile] + public struct BendConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] public NativeArray stiffnesses; + [ReadOnly] public NativeArray plasticity; //plastic yield, creep + public NativeArray restBends; + public NativeArray lambdas; + + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray invMasses; + + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray counts; + + [ReadOnly] public float deltaTime; + + public void Execute(int i) + { + 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; + + 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) + + math.min(0, constraint + stiffnesses[i].x); + + // plasticity: + if (math.abs(constraint) > plasticity[i].x) + restBends[i] += constraint * plasticity[i].y * deltaTime; + + // 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 + BurstMath.epsilon); + float4 correction = dlambda * bendVector / (bend + BurstMath.epsilon); + + lambdas[i] += dlambda; + + deltas[p1] -= correction * 2 * w1; + deltas[p2] -= correction * 2 * w2; + deltas[p3] += correction * 4 * w3; + + counts[p1]++; + counts[p2]++; + counts[p3]++; + } + } + + [BurstCompile] + public struct ApplyBendConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] public float sorFactor; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray positions; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray counts; + + public void Execute(int i) + { + int p1 = particleIndices[i * 3]; + int p2 = particleIndices[i * 3 + 1]; + int p3 = particleIndices[i * 3 + 2]; + + 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; + } + + if (counts[p3] > 0) + { + positions[p3] += deltas[p3] * sorFactor / counts[p3]; + deltas[p3] = float4.zero; + counts[p3] = 0; + } + } + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraintsBatch.cs.meta new file mode 100644 index 00000000..17458903 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3ca9c1fed63774363964743eb64fb68b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist.meta new file mode 100644 index 00000000..ef85fae7 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e62fc9e22b02847ba86a32d3d0f375da +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraints.cs new file mode 100644 index 00000000..6f913d95 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraints.cs @@ -0,0 +1,26 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; + +namespace Obi +{ + public class BurstBendTwistConstraints : BurstConstraintsImpl + { + public BurstBendTwistConstraints(BurstSolverImpl solver) : base(solver, Oni.ConstraintType.BendTwist) + { + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new BurstBendTwistConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as BurstBendTwistConstraintsBatch); + batch.Destroy(); + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraints.cs.meta new file mode 100644 index 00000000..e87fcafa --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59166e10c311e43e283064f9c03b525c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraintsBatch.cs new file mode 100644 index 00000000..17e1a0e6 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraintsBatch.cs @@ -0,0 +1,181 @@ +#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 +{ + public class BurstBendTwistConstraintsBatch : BurstConstraintsBatchImpl, IBendTwistConstraintsBatchImpl + { + private NativeArray orientationIndices; + private NativeArray restDarboux; + private NativeArray stiffnesses; + private NativeArray plasticity; + + public BurstBendTwistConstraintsBatch(BurstBendTwistConstraints 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.AsNativeArray(); + this.restDarboux = restDarboux.AsNativeArray(); + this.stiffnesses = stiffnesses.AsNativeArray(); + this.plasticity = plasticity.AsNativeArray(); + this.lambdas = lambdas.AsNativeArray(); + m_ConstraintCount = count; + } + + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) + { + var projectConstraints = new BendTwistConstraintsBatchJob() + { + orientationIndices = orientationIndices, + restDarboux = restDarboux, + stiffnesses = stiffnesses, + plasticity = plasticity, + lambdas = lambdas.Reinterpret(), + + orientations = solverImplementation.orientations, + invRotationalMasses = solverImplementation.invRotationalMasses, + + orientationDeltas = solverImplementation.orientationDeltas, + orientationCounts = solverImplementation.orientationConstraintCounts , + + deltaTime = substepTime + }; + + return projectConstraints.Schedule(m_ConstraintCount, 32, inputDeps); + } + + public override JobHandle Apply(JobHandle inputDeps, float substepTime) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var applyConstraints = new ApplyBendTwistConstraintsBatchJob() + { + orientationIndices = orientationIndices, + + orientations = solverImplementation.orientations, + orientationDeltas = solverImplementation.orientationDeltas, + orientationCounts = solverImplementation.orientationConstraintCounts, + + sorFactor = parameters.SORFactor + }; + + return applyConstraints.Schedule(m_ConstraintCount, 64, inputDeps); + } + + [BurstCompile] + public struct BendTwistConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeArray orientationIndices; + [ReadOnly] public NativeArray stiffnesses; + [ReadOnly] public NativeArray plasticity; + public NativeArray restDarboux; + public NativeArray lambdas; + + [ReadOnly] public NativeArray orientations; + [ReadOnly] public NativeArray invRotationalMasses; + + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray orientationDeltas; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray orientationCounts; + + [ReadOnly] public float deltaTime; + + public void Execute(int i) + { + 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 = math.mul(math.conjugate(orientations[q1]), orientations[q2]); + + 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.xyz) > math.lengthsq(omega_plus.value.xyz)) + omega = omega_plus; + + // plasticity + if (math.lengthsq(omega.value.xyz) > plasticity[i].x * plasticity[i].x) + { + rest.value += omega.value * plasticity[i].y * deltaTime; + restDarboux[i] = rest; + } + + float3 dlambda = (omega.value.xyz - compliances * lambdas[i]) / (compliances + new float3(w1 + w2 + BurstMath.epsilon)); + + //discrete Darboux vector does not have vanishing scalar part + quaternion dlambdaQ = new quaternion(dlambda[0], dlambda[1], dlambda[2],0); + + quaternion d1 = orientationDeltas[q1]; + quaternion d2 = orientationDeltas[q2]; + + d1.value += math.mul(orientations[q2], dlambdaQ).value * w1; + d2.value -= math.mul(orientations[q1], dlambdaQ).value * w2; + + orientationDeltas[q1] = d1; + orientationDeltas[q2] = d2; + + orientationCounts[q1]++; + orientationCounts[q2]++; + + lambdas[i] += dlambda; + + } + } + + [BurstCompile] + public struct ApplyBendTwistConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeArray orientationIndices; + [ReadOnly] public float sorFactor; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray orientations; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray orientationDeltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray orientationCounts; + + public void Execute(int i) + { + int p1 = orientationIndices[i * 2]; + int p2 = orientationIndices[i * 2 + 1]; + + if (orientationCounts[p1] > 0) + { + quaternion q = orientations[p1]; + q.value += orientationDeltas[p1].value * sorFactor / orientationCounts[p1]; + orientations[p1] = math.normalize(q); + + orientationDeltas[p1] = new quaternion(0, 0, 0, 0); + orientationCounts[p1] = 0; + } + + if (orientationCounts[p2] > 0) + { + quaternion q = orientations[p2]; + q.value += orientationDeltas[p2].value * sorFactor / orientationCounts[p2]; + orientations[p2] = math.normalize(q); + + orientationDeltas[p2] = new quaternion(0, 0, 0, 0); + orientationCounts[p2] = 0; + } + } + + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraintsBatch.cs.meta new file mode 100644 index 00000000..3271c978 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c6235d2e315a94287ab8a219496d7961 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsBatchImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsBatchImpl.cs new file mode 100644 index 00000000..ccf613e1 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsBatchImpl.cs @@ -0,0 +1,110 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using UnityEngine; +using Unity.Burst; +using Unity.Jobs; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Mathematics; +using System.Collections; + +namespace Obi +{ + public abstract class BurstConstraintsBatchImpl : IConstraintsBatchImpl + { + protected IBurstConstraintsImpl 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 { m_Enabled = value; } + get { return m_Enabled; } + } + + public IConstraints constraints + { + get { return m_Constraints; } + } + + public ObiSolver solverAbstraction + { + get { return ((BurstSolverImpl)m_Constraints.solver).abstraction; } + } + + public BurstSolverImpl solverImplementation + { + get { return (BurstSolverImpl)m_Constraints.solver; } + } + + protected NativeArray particleIndices; + protected NativeArray lambdas; + + public virtual JobHandle Initialize(JobHandle inputDeps, float substepTime) + { + if (lambdas.IsCreated) + { + 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 steps, float timeLeft); + public abstract JobHandle Apply(JobHandle inputDeps, float substepTime); + + public virtual void Destroy() + { + // clean resources allocated by the batch, no need for a default implementation. + } + + public void SetConstraintCount(int constraintCount) + { + m_ConstraintCount = constraintCount; + } + public int GetConstraintCount() + { + return m_ConstraintCount; + } + + public static void ApplyPositionDelta(int particleIndex, float sorFactor, ref NativeArray positions, ref NativeArray deltas, ref NativeArray counts) + { + if (counts[particleIndex] > 0) + { + positions[particleIndex] += deltas[particleIndex] * sorFactor / counts[particleIndex]; + deltas[particleIndex] = float4.zero; + counts[particleIndex] = 0; + } + } + + public static void ApplyOrientationDelta(int particleIndex, float sorFactor, ref NativeArray orientations, ref NativeArray deltas, ref NativeArray counts) + { + if (counts[particleIndex] > 0) + { + quaternion q = orientations[particleIndex]; + q.value += deltas[particleIndex].value * sorFactor / counts[particleIndex]; + orientations[particleIndex] = math.normalize(q); + + deltas[particleIndex] = new quaternion(0, 0, 0, 0); + 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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsBatchImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsBatchImpl.cs.meta new file mode 100644 index 00000000..165c6744 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsBatchImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 09a081eed828341979cf470e2eca6ee0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsImpl.cs new file mode 100644 index 00000000..0e58ce69 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsImpl.cs @@ -0,0 +1,145 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using UnityEngine; +using Unity.Jobs; +using Unity.Collections; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + public interface IBurstConstraintsImpl : IConstraints + { + JobHandle Initialize(JobHandle inputDeps, float substepTime); + JobHandle Project(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft); + void Dispose(); + + IConstraintsBatchImpl CreateConstraintsBatch(); + void RemoveBatch(IConstraintsBatchImpl batch); + } + + public abstract class BurstConstraintsImpl : IBurstConstraintsImpl where T : BurstConstraintsBatchImpl + { + protected BurstSolverImpl 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 BurstConstraintsImpl(BurstSolverImpl 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 JobHandle Initialize(JobHandle inputDeps, float substepTime) + { + // 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; + + JobHandle result = JobHandle.CombineDependencies(deps); + deps.Dispose(); + + return result; + } + + return inputDeps; + } + + public JobHandle Project(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) + { + UnityEngine.Profiling.Profiler.BeginSample("Project"); + + var parameters = m_Solver.abstraction.GetConstraintParameters(m_ConstraintType); + + switch(parameters.evaluationOrder) + { + case Oni.ConstraintParameters.EvaluationOrder.Sequential: + inputDeps = EvaluateSequential(inputDeps, stepTime, substepTime, steps, timeLeft); + break; + + case Oni.ConstraintParameters.EvaluationOrder.Parallel: + inputDeps = EvaluateParallel(inputDeps, stepTime, substepTime, steps, timeLeft); + break; + } + + UnityEngine.Profiling.Profiler.EndSample(); + + return inputDeps; + } + + 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, steps, timeLeft); + inputDeps = batches[i].Apply(inputDeps, substepTime); + m_Solver.ScheduleBatchedJobsIfNeeded(); + } + } + + return inputDeps; + } + + 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, steps, timeLeft); + m_Solver.ScheduleBatchedJobsIfNeeded(); + } + + // then apply them: + for (int i = 0; i < batches.Count; ++i) + if (batches[i].enabled) + { + inputDeps = batches[i].Apply(inputDeps, substepTime); + m_Solver.ScheduleBatchedJobsIfNeeded(); + } + + return inputDeps; + } + + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsImpl.cs.meta new file mode 100644 index 00000000..3c1af147 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c1b834b5430e4d3790a5979367cd915 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain.meta new file mode 100644 index 00000000..b92adc0c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 60c7b29b5d2db47a68bfc9b00847af01 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraints.cs new file mode 100644 index 00000000..9a4b5c58 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraints.cs @@ -0,0 +1,26 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; + +namespace Obi +{ + public class BurstChainConstraints : BurstConstraintsImpl + { + public BurstChainConstraints(BurstSolverImpl solver) : base(solver, Oni.ConstraintType.Chain) + { + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new BurstChainConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as BurstChainConstraintsBatch); + batch.Destroy(); + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraints.cs.meta new file mode 100644 index 00000000..31b28dde --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ea608f10fe5d24cb392ca8dcd960a920 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraintsBatch.cs new file mode 100644 index 00000000..2a177188 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraintsBatch.cs @@ -0,0 +1,222 @@ +#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 +{ + public class BurstChainConstraintsBatch : BurstConstraintsBatchImpl, IChainConstraintsBatchImpl + { + private NativeArray firstIndex; + private NativeArray numIndices; + private NativeArray restLengths; + + public BurstChainConstraintsBatch(BurstChainConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.Chain; + } + + public void SetChainConstraints(ObiNativeIntList particleIndices, ObiNativeVector2List restLengths, ObiNativeIntList firstIndex, ObiNativeIntList numIndices, int count) + { + this.particleIndices = particleIndices.AsNativeArray(); + this.firstIndex = firstIndex.AsNativeArray(); + this.numIndices = numIndices.AsNativeArray(); + this.restLengths = restLengths.AsNativeArray(); + m_ConstraintCount = count; + } + + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) + { + + var projectConstraints = new ChainConstraintsBatchJob() + { + particleIndices = particleIndices, + firstIndex = firstIndex, + numIndices = numIndices, + restLengths = restLengths, + + positions = solverImplementation.positions, + invMasses = solverImplementation.invMasses, + + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts + }; + + return projectConstraints.Schedule(m_ConstraintCount, 4, inputDeps); + } + + public override JobHandle Apply(JobHandle inputDeps, float substepTime) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var applyConstraints = new ApplyChainConstraintsBatchJob() + { + particleIndices = particleIndices, + firstIndex = firstIndex, + numIndices = numIndices, + + positions = solverImplementation.positions, + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + + sorFactor = parameters.SORFactor + }; + + return applyConstraints.Schedule(m_ConstraintCount, 8, inputDeps); + } + + [BurstCompile] + public struct ChainConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] public NativeArray firstIndex; + [ReadOnly] public NativeArray numIndices; + [ReadOnly] public NativeArray restLengths; + + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray invMasses; + + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray counts; + + public void Execute(int c) + { + int numEdges = numIndices[c] - 1; + int first = firstIndex[c]; + float minLength = restLengths[c].x; + float maxLength = restLengths[c].y; + + // (ni:constraint gradient, di:desired lenght) + NativeArray ni = 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) + { + int edge = first + i; + + float4 p1 = positions[particleIndices[edge]]; + float4 p2 = positions[particleIndices[edge+1]]; + float4 diff = p1 - p2; + + float distance = math.length(diff); + ni[i] = new float4(diff/(distance + BurstMath.epsilon)); + } + + // calculate ai, bi and ci (superdiagonals): + for (int i = 0; i < numEdges; ++i) + { + int edge = first + i; + + float w_i_ = invMasses[particleIndices[edge]]; + float w__i = invMasses[particleIndices[edge+1]]; + + float4 ni__ = (i > 0) ? ni[i - 1] : float4.zero; + float4 n_i_ = ni[i]; + float4 n__i = (i < numEdges - 1) ? ni[i + 1] : float4.zero; + + diagonals[i] = new float3( + -w_i_ * math.dot(n_i_, ni__), // ai + w_i_ + w__i, // bi + -w__i * math.dot(n_i_, n__i));// ci + } + + // 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) ? diagonals[i - 1].x : 0; + float dip_ = (i > 0) ? diagonals[i - 1].y : 0; + float den = diagonals[i].y - cip_ * diagonals[i].x; + + float3 d = diagonals[i]; + if (math.abs(den) > BurstMath.epsilon) + { + 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 + d.xy = float2.zero; + + diagonals[i] = d; + } + + // solve step #2, backward sweep. reuse diagonals.z to store solution xi: + for (int i = numEdges - 1; i >= 0; --i) + { + float xi_ = (i < numEdges - 1) ? diagonals[i + 1].z : 0; + + float3 d = diagonals[i]; + d.z = d.y - d.x * xi_; + diagonals[i] = d; + } + + // calculate deltas: + for (int i = 0; i < numIndices[c]; ++i) + { + int index = first + i; + + float4 ni__ = (i > 0) ? ni[i - 1] : float4.zero; + float4 n_i_ = (i < numIndices[c] - 1) ? ni[i] : float4.zero; + + 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); + counts[p]++; + } + } + } + + [BurstCompile] + public struct ApplyChainConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] public NativeArray firstIndex; + [ReadOnly] public NativeArray numIndices; + [ReadOnly] public float sorFactor; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray positions; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray counts; + + public void Execute(int i) + { + int first = firstIndex[i]; + int last = first + numIndices[i]; + + for (int k = first; k < last; ++k) + { + int p = particleIndices[k]; + if (counts[p] > 0) + { + positions[p] += deltas[p] * sorFactor / counts[p]; + deltas[p] = float4.zero; + counts[p] = 0; + } + } + } + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraintsBatch.cs.meta new file mode 100644 index 00000000..fdbcc4aa --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 832ac0a67ec764ee6a1e9a69fc1092e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision.meta new file mode 100644 index 00000000..a28d030e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0d7d6ac7f5b664d5cb7860b843e47fff +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/ApplyCollisionConstraintsJob.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/ApplyCollisionConstraintsJob.cs new file mode 100644 index 00000000..ccaf624b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/ApplyCollisionConstraintsJob.cs @@ -0,0 +1,49 @@ +#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] + public struct ApplyCollisionConstraintsBatchJob : IJob + { + [ReadOnly] public NativeArray contacts; + + [ReadOnly] public NativeArray simplices; + [ReadOnly] public SimplexCounts simplexCounts; + + [NativeDisableParallelForRestriction] public NativeArray positions; + [NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableParallelForRestriction] public NativeArray counts; + + [NativeDisableParallelForRestriction] public NativeArray orientations; + [NativeDisableParallelForRestriction] public NativeArray orientationDeltas; + [NativeDisableParallelForRestriction] public NativeArray orientationCounts; + + [ReadOnly] public Oni.ConstraintParameters constraintParameters; + + public void Execute() + { + for (int i = 0; i < contacts.Length; ++i) + { + int simplexStart = simplexCounts.GetSimplexStartAndSize(contacts[i].bodyA, out int simplexSize); + + for (int j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + BurstConstraintsBatchImpl.ApplyPositionDelta(particleIndex, constraintParameters.SORFactor, ref positions, ref deltas, ref counts); + BurstConstraintsBatchImpl.ApplyOrientationDelta(particleIndex, constraintParameters.SORFactor, ref orientations, ref orientationDeltas, ref orientationCounts); + } + } + } + + } + +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/ApplyCollisionConstraintsJob.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/ApplyCollisionConstraintsJob.cs.meta new file mode 100644 index 00000000..82d43c72 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/ApplyCollisionConstraintsJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f97613844b24a40899f10722bcfc4cf8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraints.cs new file mode 100644 index 00000000..b139b948 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraints.cs @@ -0,0 +1,31 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; + +namespace Obi +{ + public class BurstColliderCollisionConstraints : BurstConstraintsImpl + { + public BurstColliderCollisionConstraints(BurstSolverImpl solver) : base(solver, Oni.ConstraintType.Collision) + { + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new BurstColliderCollisionConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as BurstColliderCollisionConstraintsBatch); + batch.Destroy(); + } + + public override int GetConstraintCount() + { + return ((BurstSolverImpl)solver).abstraction.colliderContacts.count; + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraints.cs.meta new file mode 100644 index 00000000..2df9c312 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e31847a0e619545c0bc70258b413a42e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraintsBatch.cs new file mode 100644 index 00000000..4513a10a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraintsBatch.cs @@ -0,0 +1,344 @@ +#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 +{ + public class BurstColliderCollisionConstraintsBatch : BurstConstraintsBatchImpl, IColliderCollisionConstraintsBatchImpl + { + public BurstColliderCollisionConstraintsBatch(BurstColliderCollisionConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.Collision; + } + + public override JobHandle Initialize(JobHandle inputDeps, float substepTime) + { + var updateContacts = new UpdateContactsJob() + { + prevPositions = solverImplementation.prevPositions, + prevOrientations = solverImplementation.prevOrientations, + velocities = solverImplementation.velocities, + radii = solverImplementation.principalRadii, + invMasses = solverImplementation.invMasses, + invRotationalMasses = solverImplementation.invRotationalMasses, + particleMaterialIndices = solverImplementation.collisionMaterials, + collisionMaterials = ObiColliderWorld.GetInstance().collisionMaterials.AsNativeArray(), + + simplices = solverImplementation.simplices, + simplexCounts = solverImplementation.simplexCounts, + + 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(), + + 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).abstraction.colliderContacts.count, 128, inputDeps); + } + + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var projectConstraints = new CollisionConstraintsBatchJob() + { + positions = solverImplementation.positions, + prevPositions = solverImplementation.prevPositions, + orientations = solverImplementation.orientations, + prevOrientations = solverImplementation.prevOrientations, + invMasses = solverImplementation.invMasses, + radii = solverImplementation.principalRadii, + particleMaterialIndices = solverImplementation.collisionMaterials, + + simplices = solverImplementation.simplices, + simplexCounts = solverImplementation.simplexCounts, + + shapes = ObiColliderWorld.GetInstance().colliderShapes.AsNativeArray(), + transforms = ObiColliderWorld.GetInstance().colliderTransforms.AsNativeArray(), + collisionMaterials = ObiColliderWorld.GetInstance().collisionMaterials.AsNativeArray(), + rigidbodies = ObiColliderWorld.GetInstance().rigidbodies.AsNativeArray(), + rigidbodyLinearDeltas = solverImplementation.abstraction.rigidbodyLinearDeltas.AsNativeArray(), + rigidbodyAngularDeltas = solverImplementation.abstraction.rigidbodyAngularDeltas.AsNativeArray(), + + deltas = solverAbstraction.positionDeltas.AsNativeArray(), + counts = solverAbstraction.positionConstraintCounts.AsNativeArray(), + + contacts = ((BurstSolverImpl)constraints.solver).abstraction.colliderContacts.AsNativeArray(), + effectiveMasses = ((BurstSolverImpl)constraints.solver).abstraction.contactEffectiveMasses.AsNativeArray(), + inertialFrame = ((BurstSolverImpl)constraints.solver).inertialFrame, + constraintParameters = parameters, + solverParameters = solverAbstraction.parameters, + steps = steps, + timeLeft = timeLeft, + stepTime = stepTime, + substepTime = substepTime + }; + return projectConstraints.Schedule(inputDeps); + } + + public override JobHandle Apply(JobHandle inputDeps, float substepTime) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var applyConstraints = new ApplyCollisionConstraintsBatchJob() + { + contacts = ((BurstSolverImpl)constraints.solver).abstraction.colliderContacts.AsNativeArray(), + + simplices = solverImplementation.simplices, + simplexCounts = solverImplementation.simplexCounts, + + positions = solverImplementation.positions, + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + orientations = solverImplementation.orientations, + orientationDeltas = solverImplementation.orientationDeltas, + orientationCounts = solverImplementation.orientationConstraintCounts, + constraintParameters = parameters + }; + + return applyConstraints.Schedule(inputDeps); + } + + /** + * Updates contact data (such as contact distance) at the beginning of each substep. This is + * necessary because contacts are generated only once at the beginning of each step, not every substep. + */ + [BurstCompile] + public struct UpdateContactsJob : IJobParallelFor + { + [ReadOnly] public NativeArray prevPositions; + [ReadOnly] public NativeArray prevOrientations; + [ReadOnly] public NativeArray velocities; + [ReadOnly] public NativeArray radii; + [ReadOnly] public NativeArray invMasses; + [ReadOnly] public NativeArray invRotationalMasses; + + [ReadOnly] public NativeArray particleMaterialIndices; + [ReadOnly] public NativeArray collisionMaterials; + + // simplex arrays: + [ReadOnly] public NativeArray simplices; + [ReadOnly] public SimplexCounts simplexCounts; + + [ReadOnly] public NativeArray shapes; + [ReadOnly] public NativeArray transforms; + [ReadOnly] public NativeArray rigidbodies; + [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); + + // get the material from the first particle in the simplex: + int aMaterialIndex = particleMaterialIndices[simplices[simplexStart]]; + bool rollingContacts = aMaterialIndex >= 0 ? collisionMaterials[aMaterialIndex].rollingContacts > 0 : false; + + float4 relativeVelocity = float4.zero; + float4 simplexPrevPosition = float4.zero; + quaternion simplexPrevOrientation = new quaternion(0, 0, 0, 0); + float simplexInvMass = 0; + float simplexInvRotationalMass = 0; + float simplexRadius = 0; + + for (int j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + relativeVelocity += velocities[particleIndex] * contact.pointA[j]; + simplexPrevPosition += prevPositions[particleIndex] * contact.pointA[j]; + simplexPrevOrientation.value += prevOrientations[particleIndex].value * contact.pointA[j]; + simplexInvMass += invMasses[particleIndex] * contact.pointA[j]; + simplexInvRotationalMass = invRotationalMasses[particleIndex] * contact.pointA[j]; + simplexRadius += BurstMath.EllipsoidRadius(contact.normal, prevOrientations[particleIndex], radii[particleIndex].xyz) * contact.pointA[j]; + } + + // if there's a rigidbody present, subtract its velocity from the relative velocity: + int rigidbodyIndex = shapes[contact.bodyB].rigidbodyIndex; + if (rigidbodyIndex >= 0) + { + relativeVelocity -= BurstMath.GetRigidbodyVelocityAtPoint(rigidbodyIndex, contact.pointB, rigidbodies, rigidbodyLinearDeltas, rigidbodyAngularDeltas, inertialFrame); + + int bMaterialIndex = shapes[contact.bodyB].materialIndex; + rollingContacts |= bMaterialIndex >= 0 ? collisionMaterials[bMaterialIndex].rollingContacts > 0 : false; + } + + // update contact distance + contact.distance = math.dot(simplexPrevPosition - contact.pointB, contact.normal) - simplexRadius; + + // calculate contact point in A's surface: + float4 contactPoint = contact.pointB + contact.normal * contact.distance; + + // calculate contact tangent (first friction direction) using relative velocity: + contact.CalculateTangent(relativeVelocity); + + // calculate A's contact mass. + 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) + efMasses.CalculateContactMassesB(rigidbodies[rigidbodyIndex], inertialFrame.frame, contact.pointB, contact.normal, contact.tangent, contact.bitangent); + else + efMasses.ClearContactMassesB(); + + contacts[i] = contact; + effectiveMasses[i] = efMasses; + } + } + + [BurstCompile] + public struct CollisionConstraintsBatchJob : IJob + { + [ReadOnly] public NativeArray prevPositions; + [ReadOnly] public NativeArray orientations; + [ReadOnly] public NativeArray prevOrientations; + [ReadOnly] public NativeArray invMasses; + [ReadOnly] public NativeArray radii; + [ReadOnly] public NativeArray particleMaterialIndices; + + // simplex arrays: + [ReadOnly] public NativeArray simplices; + [ReadOnly] public SimplexCounts simplexCounts; + + [ReadOnly] public NativeArray shapes; + [ReadOnly] public NativeArray transforms; + [ReadOnly] public NativeArray collisionMaterials; + [ReadOnly] public NativeArray rigidbodies; + public NativeArray rigidbodyLinearDeltas; + public NativeArray rigidbodyAngularDeltas; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray positions; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray deltas; + [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 float timeLeft; + [ReadOnly] public int steps; + + public void Execute() + { + for (int i = 0; i < contacts.Length; ++i) + { + var contact = contacts[i]; + + int simplexStart = simplexCounts.GetSimplexStartAndSize(contact.bodyA, out int simplexSize); + int colliderIndex = contact.bodyB; + + // Skip contacts involving triggers: + 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); + + // 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] * contact.pointA[j]; + simplexPrevPosition += prevPositions[particleIndex] * contact.pointA[j]; + simplexRadius += BurstMath.EllipsoidRadius(contact.normal, orientations[particleIndex], radii[particleIndex].xyz) * contact.pointA[j]; + } + + // project position to the end of the full step: + 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) * frameEnd; + + // adhesion: + float lambda = contact.SolveAdhesion(effectiveMasses[i].TotalNormalInvMass, posA, posB, material.stickDistance, material.stickiness, stepTime); + + // depenetration: + 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) / substepsToEnd; + for (int j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + deltas[particleIndex] += delta * invMasses[particleIndex] * contact.pointA[j]; + counts[particleIndex]++; + } + + // Apply position deltas immediately, if using sequential evaluation: + if (constraintParameters.evaluationOrder == Oni.ConstraintParameters.EvaluationOrder.Sequential) + { + for (int j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + BurstConstraintsBatchImpl.ApplyPositionDelta(particleIndex, constraintParameters.SORFactor, ref positions, ref deltas, ref counts); + } + } + + if (rigidbodyIndex >= 0) + { + BurstMath.ApplyImpulse(rigidbodyIndex, -lambda / frameEnd * contact.normal, contact.pointB, rigidbodies, rigidbodyLinearDeltas, rigidbodyAngularDeltas, inertialFrame.frame); + } + } + + contacts[i] = contact; + } + } + + private BurstCollisionMaterial CombineCollisionMaterials(int entityA, int entityB) + { + // Combine collision materials: + int particleMaterialIndex = particleMaterialIndices[entityA]; + int colliderMaterialIndex = shapes[entityB].materialIndex; + + if (colliderMaterialIndex >= 0 && particleMaterialIndex >= 0) + return BurstCollisionMaterial.CombineWith(collisionMaterials[particleMaterialIndex], collisionMaterials[colliderMaterialIndex]); + else if (particleMaterialIndex >= 0) + return collisionMaterials[particleMaterialIndex]; + else if (colliderMaterialIndex >= 0) + return collisionMaterials[colliderMaterialIndex]; + + return new BurstCollisionMaterial(); + } + } + + + } +} +#endif diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraintsBatch.cs.meta new file mode 100644 index 00000000..7f8067c9 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 273c5561da8534560bb9b9e8d32ae092 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraints.cs new file mode 100644 index 00000000..5d57a75e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraints.cs @@ -0,0 +1,33 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; + +namespace Obi +{ + public class BurstColliderFrictionConstraints : BurstConstraintsImpl + { + public BurstColliderFrictionConstraints(BurstSolverImpl solver) : base(solver, Oni.ConstraintType.Friction) + { + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new BurstColliderFrictionConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as BurstColliderFrictionConstraintsBatch); + batch.Destroy(); + } + + public override int GetConstraintCount() + { + return ((BurstSolverImpl)solver).abstraction.colliderContacts.count; + } + } +} +#endif + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraints.cs.meta new file mode 100644 index 00000000..08ea0075 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 00f91403e75564dc6ace566943caa172 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraintsBatch.cs new file mode 100644 index 00000000..25cb44ea --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraintsBatch.cs @@ -0,0 +1,280 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Jobs; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Mathematics; +using Unity.Burst; + +namespace Obi +{ + public class BurstColliderFrictionConstraintsBatch : BurstConstraintsBatchImpl, IColliderFrictionConstraintsBatchImpl + { + public BurstColliderFrictionConstraintsBatch(BurstColliderFrictionConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.Friction; + } + + public override JobHandle Initialize(JobHandle inputDeps, float substepTime) + { + return inputDeps; + } + + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) + { + var projectConstraints = new FrictionConstraintsBatchJob() + { + positions = solverImplementation.positions, + prevPositions = solverImplementation.prevPositions, + orientations = solverImplementation.orientations, + prevOrientations = solverImplementation.prevOrientations, + + invMasses = solverImplementation.invMasses, + invRotationalMasses = solverImplementation.invRotationalMasses, + radii = solverImplementation.principalRadii, + particleMaterialIndices = solverImplementation.collisionMaterials, + + simplices = solverImplementation.simplices, + simplexCounts = solverImplementation.simplexCounts, + + shapes = ObiColliderWorld.GetInstance().colliderShapes.AsNativeArray(), + transforms = ObiColliderWorld.GetInstance().colliderTransforms.AsNativeArray(), + collisionMaterials = ObiColliderWorld.GetInstance().collisionMaterials.AsNativeArray(), + rigidbodies = ObiColliderWorld.GetInstance().rigidbodies.AsNativeArray(), + rigidbodyLinearDeltas = solverImplementation.abstraction.rigidbodyLinearDeltas.AsNativeArray(), + rigidbodyAngularDeltas = solverImplementation.abstraction.rigidbodyAngularDeltas.AsNativeArray(), + + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + orientationDeltas = solverImplementation.orientationDeltas, + orientationCounts = solverImplementation.orientationConstraintCounts, + + contacts = ((BurstSolverImpl)constraints.solver).abstraction.colliderContacts.AsNativeArray(), + effectiveMasses = ((BurstSolverImpl)constraints.solver).abstraction.contactEffectiveMasses.AsNativeArray(), + inertialFrame = ((BurstSolverImpl)constraints.solver).inertialFrame, + steps = steps, + stepTime = stepTime, + substepTime = substepTime + }; + return projectConstraints.Schedule(inputDeps); + } + + public override JobHandle Apply(JobHandle inputDeps, float substepTime) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var applyConstraints = new ApplyCollisionConstraintsBatchJob() + { + contacts = ((BurstSolverImpl)constraints.solver).abstraction.colliderContacts.AsNativeArray(), + + simplices = solverImplementation.simplices, + simplexCounts = solverImplementation.simplexCounts, + + positions = solverImplementation.positions, + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + orientations = solverImplementation.orientations, + orientationDeltas = solverImplementation.orientationDeltas, + orientationCounts = solverImplementation.orientationConstraintCounts, + constraintParameters = parameters + }; + + return applyConstraints.Schedule(inputDeps); + } + + [BurstCompile] + public struct FrictionConstraintsBatchJob : IJob + { + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray prevPositions; + [ReadOnly] public NativeArray orientations; + [ReadOnly] public NativeArray prevOrientations; + + [ReadOnly] public NativeArray invMasses; + [ReadOnly] public NativeArray invRotationalMasses; + [ReadOnly] public NativeArray radii; + [ReadOnly] public NativeArray particleMaterialIndices; + + // simplex arrays: + [ReadOnly] public NativeArray simplices; + [ReadOnly] public SimplexCounts simplexCounts; + + [ReadOnly] public NativeArray shapes; + [ReadOnly] public NativeArray transforms; + [ReadOnly] public NativeArray collisionMaterials; + [ReadOnly] public NativeArray rigidbodies; + public NativeArray rigidbodyLinearDeltas; + public NativeArray rigidbodyAngularDeltas; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray counts; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray orientationDeltas; + [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 steps; + + public void Execute() + { + for (int i = 0; i < contacts.Length; ++i) + { + var contact = contacts[i]; + + // Get the indices of the particle and collider involved in this contact: + int simplexStart = simplexCounts.GetSimplexStartAndSize(contact.bodyA, out int simplexSize); + int colliderIndex = contact.bodyB; + + // Skip contacts involving triggers: + 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; + + // Combine collision materials (use material from first particle in simplex) + BurstCollisionMaterial material = CombineCollisionMaterials(simplices[simplexStart], colliderIndex); + + // Calculate relative velocity: + float4 rA = float4.zero, rB = float4.zero; + + float4 prevPositionA = float4.zero; + float4 linearVelocityA = float4.zero; + float4 angularVelocityA = float4.zero; + float invRotationalMassA = 0; + quaternion orientationA = new quaternion(0, 0, 0, 0); + float4 simplexRadiiA = float4.zero; + + for (int j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + 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]; + invRotationalMassA += invRotationalMasses[particleIndex] * contact.pointA[j]; + orientationA.value += orientations[particleIndex].value * 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 * BurstMath.EllipsoidRadius(contact.normal, orientationA, simplexRadiiA.xyz); + relativeVelocity += new float4(math.cross(angularVelocityA.xyz, rA.xyz), 0); + } + + // Subtract rigidbody velocity: + if (rigidbodyIndex >= 0) + { + // 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); + } + + // Determine impulse magnitude: + 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) + { + float4 tangentImpulse = impulses.x * contact.tangent; + float4 bitangentImpulse = impulses.y * contact.bitangent; + float4 totalImpulse = tangentImpulse + bitangentImpulse; + + float baryScale = BurstMath.BaryScale(contact.pointA); + for (int j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + deltas[particleIndex] += (tangentImpulse * effectiveMasses[i].tangentInvMassA + bitangentImpulse * effectiveMasses[i].bitangentInvMassA) * substepTime * contact.pointA[j] * baryScale; + counts[particleIndex]++; + } + + if (rigidbodyIndex >= 0) + { + BurstMath.ApplyImpulse(rigidbodyIndex, -totalImpulse, contact.pointB, rigidbodies, rigidbodyLinearDeltas, rigidbodyAngularDeltas, inertialFrame.frame); + } + + // Rolling contacts: + if (material.rollingContacts > 0) + { + // Calculate angular velocity deltas due to friction impulse: + 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; + + // Final angular velocities, after adding the deltas: + angularVelocityA += angVelDeltaA; + float4 angularVelocityB = float4.zero; + + // Calculate weights (inverse masses): + float invMassA = math.length(math.mul(solverInertiaA, math.normalizesafe(angularVelocityA))); + float invMassB = 0; + + if (rigidbodyIndex >= 0) + { + angVelDeltaB = math.mul(-rigidbodies[rigidbodyIndex].inverseInertiaTensor, new float4(math.cross(rB.xyz, totalImpulse.xyz), 0)); + angularVelocityB = rigidbodies[rigidbodyIndex].angularVelocity + angVelDeltaB; + invMassB = math.length(math.mul(rigidbodies[rigidbodyIndex].inverseInertiaTensor, math.normalizesafe(angularVelocityB))); + } + + // Calculate rolling axis and angular velocity deltas: + float4 rollAxis = float4.zero; + float rollingImpulse = contact.SolveRollingFriction(angularVelocityA, angularVelocityB, material.rollingFriction, invMassA, invMassB, ref rollAxis); + angVelDeltaA += rollAxis * rollingImpulse * invMassA; + angVelDeltaB -= rollAxis * rollingImpulse * invMassB; + + // Apply orientation delta to particles: + quaternion orientationDelta = BurstIntegration.AngularVelocityToSpinQuaternion(orientationA, angVelDeltaA, substepTime); + + for (int j = 0; j < simplexSize; ++j) + { + int particleIndex = simplices[simplexStart + j]; + quaternion qA = orientationDeltas[particleIndex]; + qA.value += orientationDelta.value; + orientationDeltas[particleIndex] = qA; + orientationCounts[particleIndex]++; + } + + // Apply angular velocity delta to rigidbody: + if (rigidbodyIndex >= 0) + { + float4 angularDelta = rigidbodyAngularDeltas[rigidbodyIndex]; + angularDelta += angVelDeltaB; + rigidbodyAngularDeltas[rigidbodyIndex] = angularDelta; + } + } + } + + contacts[i] = contact; + } + } + + private BurstCollisionMaterial CombineCollisionMaterials(int entityA, int entityB) + { + // Combine collision materials: + int particleMaterialIndex = particleMaterialIndices[entityA]; + int colliderMaterialIndex = shapes[entityB].materialIndex; + + if (colliderMaterialIndex >= 0 && particleMaterialIndex >= 0) + return BurstCollisionMaterial.CombineWith(collisionMaterials[particleMaterialIndex], collisionMaterials[colliderMaterialIndex]); + else if (particleMaterialIndex >= 0) + return collisionMaterials[particleMaterialIndex]; + else if (colliderMaterialIndex >= 0) + return collisionMaterials[colliderMaterialIndex]; + + return new BurstCollisionMaterial(); + } + + } + + + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraintsBatch.cs.meta new file mode 100644 index 00000000..fb3228fd --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9abf9b1d2ee1a4d09b965103ae78fe53 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density.meta new file mode 100644 index 00000000..10b4e12b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1d2e0de656b27431f9501fe6ffacff67 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraints.cs new file mode 100644 index 00000000..268f204a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraints.cs @@ -0,0 +1,502 @@ +#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 +{ + public class BurstDensityConstraints : BurstConstraintsImpl + { + public NativeList fluidParticles; + + public BurstDensityConstraints(BurstSolverImpl solver) : base(solver, Oni.ConstraintType.Density) + { + fluidParticles = new NativeList(Allocator.Persistent); + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new BurstDensityConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void Dispose() + { + fluidParticles.Dispose(); + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as BurstDensityConstraintsBatch); + batch.Destroy(); + } + + protected override JobHandle EvaluateSequential(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) + { + return EvaluateParallel(inputDeps, stepTime, substepTime, steps, timeLeft); + } + + protected override JobHandle EvaluateParallel(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) + { + inputDeps = UpdateInteractions(inputDeps); + + // evaluate all batches as a chain of dependencies: + for (int i = 0; i < batches.Count; ++i) + { + if (batches[i].enabled) + { + inputDeps = batches[i].Evaluate(inputDeps, stepTime, substepTime, steps, timeLeft); + m_Solver.ScheduleBatchedJobsIfNeeded(); + } + } + + // calculate per-particle density lambdas: + inputDeps = CalculateLambdas(inputDeps, substepTime); + + // 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, + orientations = m_Solver.orientations, + prevOrientations = m_Solver.prevOrientations, + deltas = m_Solver.positionDeltas, + counts = m_Solver.positionConstraintCounts, + anisotropies = m_Solver.anisotropies, + normals = m_Solver.normals + }; + + inputDeps = app.Schedule(fluidParticles.Length, 64, inputDeps); + + // apply density positional deltas:: + for (int i = 0; i < batches.Count; ++i) + { + if (batches[i].enabled) + { + inputDeps = batches[i].Apply(inputDeps, substepTime); + m_Solver.ScheduleBatchedJobsIfNeeded(); + } + } + + return inputDeps; + } + + public JobHandle ApplyVelocityCorrections(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(); + } + } + + inputDeps = ApplyAtmosphere(inputDeps, deltaTime); + m_Solver.ScheduleBatchedJobsIfNeeded(); + + return inputDeps; + } + + public JobHandle CalculateAnisotropyLaplacianSmoothing(JobHandle inputDeps) + { + // if the constraints are deactivated or we need no anisotropy: + if (((BurstSolverImpl)solver).abstraction.parameters.maxAnisotropy <= 1) + return inputDeps; + + for (int i = 0; i < batches.Count; ++i) + { + if (batches[i].enabled) + { + inputDeps = batches[i].AccumulateSmoothPositions(inputDeps); + m_Solver.ScheduleBatchedJobsIfNeeded(); + } + } + + inputDeps = AverageSmoothPositions(inputDeps); + + for (int i = 0; i < batches.Count; ++i) + { + if (batches[i].enabled) + { + inputDeps = batches[i].AccumulateAnisotropy(inputDeps); + m_Solver.ScheduleBatchedJobsIfNeeded(); + } + } + + return AverageAnisotropy(inputDeps); + } + + private JobHandle UpdateInteractions(JobHandle inputDeps) + { + // clear existing fluid data: + var clearData = new ClearFluidDataJob() + { + 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); + + // update fluid interactions: + var updateInteractions = new UpdateInteractionsJob() + { + pairs = m_Solver.fluidInteractions, + positions = m_Solver.positions, + 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), + }; + + return updateInteractions.Schedule(((BurstSolverImpl)solver).fluidInteractions.Length, 64, inputDeps); + } + + private JobHandle CalculateLambdas(JobHandle inputDeps, float deltaTime) + { + // calculate lagrange multipliers: + var calculateLambdas = new CalculateLambdasJob() + { + fluidParticles = fluidParticles, + positions = m_Solver.positions, + prevPositions = m_Solver.prevPositions, + orientations = m_Solver.orientations, + 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), + 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 ApplyAtmosphere(JobHandle inputDeps, float deltaTime) + { + var conf = new ApplyAtmosphereJob() + { + fluidParticles = fluidParticles, + wind = m_Solver.wind, + fluidInterface = m_Solver.fluidInterface, + fluidMaterials = m_Solver.fluidMaterials, + principalRadii = m_Solver.principalRadii, + normals = m_Solver.normals, + fluidData = m_Solver.fluidData, + velocities = m_Solver.velocities, + dt = deltaTime, + solverParams = m_Solver.abstraction.parameters + }; + + return conf.Schedule(fluidParticles.Length, 64, inputDeps); + } + + private JobHandle AverageSmoothPositions(JobHandle inputDeps) + { + var average = new AverageSmoothPositionsJob() + { + fluidParticles = fluidParticles, + renderablePositions = m_Solver.renderablePositions, + anisotropies = m_Solver.anisotropies + }; + + return average.Schedule(fluidParticles.Length, 64, inputDeps); + } + + private JobHandle AverageAnisotropy(JobHandle inputDeps) + { + var average = new AverageAnisotropyJob() + { + fluidParticles = fluidParticles, + renderablePositions = m_Solver.renderablePositions, + renderableOrientations = m_Solver.renderableOrientations, + principalRadii = m_Solver.principalRadii, + anisotropies = m_Solver.anisotropies, + maxAnisotropy = m_Solver.abstraction.parameters.maxAnisotropy, + renderableRadii = m_Solver.renderableRadii, + fluidData = m_Solver.fluidData, + solverParams = m_Solver.abstraction.parameters + }; + + return average.Schedule(fluidParticles.Length, 64, inputDeps); + } + + [BurstCompile] + public struct ClearFluidDataJob : IJobParallelFor + { + [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) + { + int p = fluidParticles[i]; + fluidData[p] = float4.zero; + massCenters[p] = float4.zero; + prevMassCenters[p] = float4.zero; + moments[p] = float4x4.zero; + } + } + + [BurstCompile] + public struct UpdateInteractionsJob : IJobParallelFor + { + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray fluidMaterials; + [ReadOnly] public Poly6Kernel densityKernel; + [ReadOnly] public SpikyKernel gradientKernel; + + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray pairs; + + [ReadOnly] public BatchData batchData; + + public void Execute(int i) + { + var pair = pairs[i]; + + // calculate normalized gradient vector: + 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, fluidMaterials[pair.particleA].x) + + densityKernel.W(distance, fluidMaterials[pair.particleB].x)) * 0.5f; + + pair.avgGradient = (gradientKernel.W(distance, fluidMaterials[pair.particleA].x) + + gradientKernel.W(distance, fluidMaterials[pair.particleB].x)) * 0.5f; + + pairs[i] = pair; + } + } + + [BurstCompile] + public struct CalculateLambdasJob : IJobParallelFor + { + [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 Oni.SolverParameters solverParams; + + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray fluidData; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray massCenters; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray prevMassCenters; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray moments; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray orientations; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray counts; + + public void Execute(int p) + { + int i = fluidParticles[p]; + + float restVolume = math.pow(principalRadii[i].x * 2, 3 - (int)solverParams.mode); + float4 data = fluidData[i]; + + float grad = restVolume * gradientKernel.W(0, fluidMaterials[i].x); + + // 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; + + // 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); + + // calculate lambda: + 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.2f) / positions[i].w; + moments[i] -= M * BurstMath.multrnsp4(massCenters[i], prevMassCenters[i]); + + // extract neighborhood orientation delta: + orientations[i] = BurstMath.ExtractRotation(moments[i], quaternion.identity, 2); + + // viscosity and vorticity: + float4 viscGoal = new float4(massCenters[i].xyz + math.rotate(orientations[i], (prevPositions[i] - prevMassCenters[i]).xyz), 0); + float4 vortGoal = new float4(massCenters[i].xyz + math.rotate(orientations[i], (positions[i] - massCenters[i]).xyz), 0); + deltas[i] += (viscGoal - positions[i]) * fluidMaterials[i].z; + deltas[i] += (vortGoal - positions[i]) * fluidMaterials[i].w * 0.1f; + + 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 orientations; + [ReadOnly] public NativeArray prevOrientations; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray normals; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray anisotropies; + + 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; + + orientations[i] = math.mul(orientations[i], prevOrientations[i]); + } + } + + [BurstCompile] + public struct ApplyAtmosphereJob : IJobParallelFor + { + [ReadOnly] public NativeList fluidParticles; + [ReadOnly] public NativeArray wind; + [ReadOnly] public NativeArray fluidInterface; + [ReadOnly] public NativeArray fluidMaterials; + [ReadOnly] public NativeArray principalRadii; + [ReadOnly] public NativeArray normals; + [ReadOnly] public NativeArray fluidData; + + [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] -= fluidInterface[i].x * velocityDiff * math.max(0, 1 - fluidData[i][0] * restVolume) * dt; + + // ambient pressure: + velocities[i] += fluidInterface[i].y * normals[i] * dt; + } + } + + [BurstCompile] + public struct AverageSmoothPositionsJob : IJobParallelFor + { + [ReadOnly] public NativeList fluidParticles; + [ReadOnly] public NativeArray renderablePositions; + + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray anisotropies; + + public void Execute(int p) + { + int i = fluidParticles[p]; + + var smoothPos = anisotropies[i]; + + if (smoothPos.c3.w > 0) + smoothPos.c3 /= smoothPos.c3.w; + else + smoothPos.c3.xyz = renderablePositions[i].xyz; + + anisotropies[i] = smoothPos; + } + } + + [BurstCompile] + public struct AverageAnisotropyJob : IJobParallelFor + { + [ReadOnly] public NativeList fluidParticles; + [ReadOnly] public NativeArray principalRadii; + [ReadOnly] public float maxAnisotropy; + [ReadOnly] public NativeArray anisotropies; + + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray fluidData; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray renderablePositions; + [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 (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(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; + + renderableOrientations[i] = quaternion.LookRotationSafe(u.c2,u.c1); + renderableRadii[i] = new float4(s.xyz,1); + } + else + { + float radius = principalRadii[i].x / maxAnisotropy; + 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] = math.lerp(renderablePositions[i], anisotropies[i].c3, math.min((maxAnisotropy - 1)/3.0f,1)); + } + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraints.cs.meta new file mode 100644 index 00000000..6099508e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df96ac4db14c846ea99a6ebc5771098f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraintsBatch.cs new file mode 100644 index 00000000..29a13eed --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraintsBatch.cs @@ -0,0 +1,403 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Jobs; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Mathematics; +using Unity.Burst; + +namespace Obi +{ + public class BurstDensityConstraintsBatch : BurstConstraintsBatchImpl, IDensityConstraintsBatchImpl + { + public BatchData batchData; + + public BurstDensityConstraintsBatch(BurstDensityConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.Density; + } + + public override JobHandle Initialize(JobHandle inputDeps, float substepTime) + { + return inputDeps; + } + + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) + { + + // update densities and gradients: + var updateDensities = new UpdateDensitiesJob() + { + pairs = ((BurstSolverImpl)constraints.solver).fluidInteractions, + positions = solverImplementation.positions, + 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, + solverParams = solverAbstraction.parameters + }; + + int batchCount = batchData.isLast ? batchData.workItemCount : 1; + return updateDensities.Schedule(batchData.workItemCount, batchCount, inputDeps); + } + + public override JobHandle Apply(JobHandle inputDeps, float substepTime) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + // update densities and gradients: + var apply = new ApplyDensityConstraintsJob() + { + 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 + }; + + int batchCount = batchData.isLast ? batchData.workItemCount : 1; + return apply.Schedule(batchData.workItemCount, batchCount, inputDeps); + } + + public JobHandle CalculateNormals(JobHandle inputDeps, float deltaTime) + { + int batchCount = batchData.isLast ? batchData.workItemCount : 1; + + var vorticity = new NormalsJob() + { + invMasses = solverImplementation.invMasses, + principalRadii = solverImplementation.principalRadii, + fluidMaterials = solverImplementation.fluidMaterials, + fluidData = solverImplementation.fluidData, + fluidInterface = solverImplementation.fluidInterface, + userData = solverImplementation.userData, + pairs = ((BurstSolverImpl)constraints.solver).fluidInteractions, + normals = solverImplementation.normals, + batchData = batchData, + dt = deltaTime, + }; + + return vorticity.Schedule(batchData.workItemCount, batchCount, inputDeps); + } + + public JobHandle ViscosityAndVorticity(JobHandle inputDeps) + { + var eta = new ViscosityVorticityJob() + { + positions = solverImplementation.positions, + prevPositions = solverImplementation.prevPositions, + orientations = solverImplementation.orientations, + pairs = ((BurstSolverImpl)constraints.solver).fluidInteractions, + massCenters = solverImplementation.normals, + prevMassCenters = solverImplementation.renderablePositions, + fluidParams = solverImplementation.fluidMaterials, + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + batchData = batchData + }; + + int batchCount = batchData.isLast ? batchData.workItemCount : 1; + return eta.Schedule(batchData.workItemCount, batchCount, inputDeps); + } + + public JobHandle AccumulateSmoothPositions(JobHandle inputDeps) + { + var accumulateSmooth = new AccumulateSmoothPositionsJob() + { + renderablePositions = solverImplementation.renderablePositions, + anisotropies = solverImplementation.anisotropies, + fluidMaterials = solverImplementation.fluidMaterials, + densityKernel = new Poly6Kernel(solverAbstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D), + pairs = ((BurstSolverImpl)constraints.solver).fluidInteractions, + batchData = batchData + }; + + int batchCount = batchData.isLast ? batchData.workItemCount : 1; + return accumulateSmooth.Schedule(batchData.workItemCount, batchCount, inputDeps); + } + + public JobHandle AccumulateAnisotropy(JobHandle inputDeps) + { + var accumulateAnisotropy = new AccumulateAnisotropyJob() + { + renderablePositions = solverImplementation.renderablePositions, + anisotropies = solverImplementation.anisotropies, + pairs = ((BurstSolverImpl)constraints.solver).fluidInteractions, + batchData = batchData + }; + + int batchCount = batchData.isLast ? batchData.workItemCount : 1; + return accumulateAnisotropy.Schedule(batchData.workItemCount, batchCount, inputDeps); + } + + [BurstCompile] + public struct UpdateDensitiesJob : IJobParallelFor + { + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray prevPositions; + [ReadOnly] public NativeArray fluidMaterials; + [ReadOnly] public NativeArray principalRadii; + [ReadOnly] public NativeArray pairs; + + [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 Oni.SolverParameters solverParams; + + public void Execute(int workItemIndex) + { + int start, end; + batchData.GetConstraintRange(workItemIndex, out start, out end); + + for (int i = start; i < end; ++i) + { + var pair = pairs[i]; + + 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; + + float vA = restVolumeB / restVolumeA; + float vB = restVolumeA / restVolumeB; + + // accumulate pbf data (density, gradients): + fluidData[pair.particleA] += new float4(vA * pair.avgKernel, 0, gradA, gradA * gradA); + fluidData[pair.particleB] += new float4(vB * pair.avgKernel, 0, gradB, gradB * gradB); + + // 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.2f) / 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.2f) / positions[pair.particleA].w; + } + } + } + + [BurstCompile] + public struct ApplyDensityConstraintsJob : IJobParallelFor + { + [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) + { + int start, end; + batchData.GetConstraintRange(workItemIndex, out start, out end); + + for (int i = start; i < end; ++i) + { + var pair = pairs[i]; + + 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 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; + delta.w = 0; + positions[pair.particleA] += delta * positions[pair.particleA].w; + positions[pair.particleB] -= delta * positions[pair.particleB].w; + + } + } + } + + [BurstCompile] + public struct ViscosityVorticityJob : IJobParallelFor + { + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray prevPositions; + [ReadOnly] public NativeArray orientations; + [ReadOnly] public NativeArray fluidParams; + [ReadOnly] public NativeArray pairs; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray massCenters; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray prevMassCenters; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray counts; + + [ReadOnly] public BatchData batchData; + + public void Execute(int workItemIndex) + { + int start, end; + batchData.GetConstraintRange(workItemIndex, out start, out end); + + for (int i = start; i < end; ++i) + { + var pair = pairs[i]; + + // viscosity: + float4 goalA = new float4(massCenters[pair.particleB].xyz + math.rotate(orientations[pair.particleB], (prevPositions[pair.particleA] - prevMassCenters[pair.particleB]).xyz), 0); + float4 goalB = new float4(massCenters[pair.particleA].xyz + math.rotate(orientations[pair.particleA], (prevPositions[pair.particleB] - prevMassCenters[pair.particleA]).xyz), 0); + deltas[pair.particleA] += (goalA - positions[pair.particleA]) * fluidParams[pair.particleB].z; + deltas[pair.particleB] += (goalB - positions[pair.particleB]) * fluidParams[pair.particleA].z; + + // vorticity: + goalA = new float4(massCenters[pair.particleB].xyz + math.rotate(orientations[pair.particleB], (positions[pair.particleA] - massCenters[pair.particleB]).xyz), 0); + goalB = new float4(massCenters[pair.particleA].xyz + math.rotate(orientations[pair.particleA], (positions[pair.particleB] - massCenters[pair.particleA]).xyz), 0); + deltas[pair.particleA] += (goalA - positions[pair.particleA]) * fluidParams[pair.particleB].w * 0.1f; + deltas[pair.particleB] += (goalB - positions[pair.particleB]) * fluidParams[pair.particleA].w * 0.1f; + + counts[pair.particleA]++; + counts[pair.particleB]++; + } + } + } + + [BurstCompile] + public struct NormalsJob : IJobParallelFor + { + [ReadOnly] public NativeArray invMasses; + [ReadOnly] public NativeArray principalRadii; + [ReadOnly] public NativeArray fluidMaterials; + [ReadOnly] public NativeArray fluidInterface; + [ReadOnly] public NativeArray fluidData; + [ReadOnly] public NativeArray pairs; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray userData; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray normals; + + [ReadOnly] public BatchData batchData; + [ReadOnly] public Oni.SolverParameters solverParams; + [ReadOnly] public float dt; + + public void Execute(int workItemIndex) + { + int start, end; + batchData.GetConstraintRange(workItemIndex, out start, out end); + + for (int i = start; i < end; ++i) + { + var pair = pairs[i]; + + 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); + + // property diffusion: + float diffusionSpeed = (fluidInterface[pair.particleA].w + fluidInterface[pair.particleB].w) * pair.avgKernel * dt; + float4 userDelta = (userData[pair.particleB] - userData[pair.particleA]) * diffusionSpeed; + userData[pair.particleA] += restVolumeB / restVolumeA * userDelta; + userData[pair.particleB] -= restVolumeA / restVolumeB * userDelta; + + // calculate color field normal: + float4 vgrad = pair.gradient * pair.avgGradient; + float radius = (fluidMaterials[pair.particleA].x + fluidMaterials[pair.particleB].x) * 0.5f; + normals[pair.particleA] += vgrad * radius * restVolumeB; + normals[pair.particleB] -= vgrad * radius * restVolumeA; + } + } + } + + [BurstCompile] + public struct AccumulateSmoothPositionsJob : IJobParallelFor + { + [ReadOnly] public NativeArray renderablePositions; + [ReadOnly] public NativeArray fluidMaterials; + [ReadOnly] public Poly6Kernel densityKernel; + + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray anisotropies; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray pairs; + + [ReadOnly] public BatchData batchData; + + public void Execute(int workItemIndex) + { + int start, end; + batchData.GetConstraintRange(workItemIndex, out start, out end); + + for (int i = start; i < end; ++i) + { + var pair = pairs[i]; + + float distance = math.length((renderablePositions[pair.particleA] - renderablePositions[pair.particleB]).xyz); + + pair.avgKernel = (densityKernel.W(distance, fluidMaterials[pair.particleA].x) + + densityKernel.W(distance, fluidMaterials[pair.particleB].x)) * 0.5f; + + 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; + } + } + } + + [BurstCompile] + public struct AccumulateAnisotropyJob : IJobParallelFor + { + [ReadOnly] public NativeArray renderablePositions; + [ReadOnly] public NativeArray pairs; + + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray anisotropies; + + [ReadOnly] public BatchData batchData; + + public void Execute(int workItemIndex) + { + int start, end; + batchData.GetConstraintRange(workItemIndex, out start, out end); + + for (int i = start; i < end; ++i) + { + var pair = pairs[i]; + + 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.multrnsp4(distanceA,distanceA); + anisotropies[pair.particleB] += BurstMath.multrnsp4(distanceB,distanceB); + } + } + } + + } +} +#endif diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraintsBatch.cs.meta new file mode 100644 index 00000000..f1d82202 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8292e6ef6129f47abaee4fb2cb49055e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels.meta new file mode 100644 index 00000000..4f0f6fa9 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5a128a7c745c84794a944362f49011fc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/CohesionKernel.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/CohesionKernel.cs new file mode 100644 index 00000000..ed30bdf3 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/CohesionKernel.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/CohesionKernel.cs.meta new file mode 100644 index 00000000..9278cced --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/Poly6Kernel.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/Poly6Kernel.cs new file mode 100644 index 00000000..412f3b18 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/Poly6Kernel.cs @@ -0,0 +1,36 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; +using Unity.Mathematics; + +namespace Obi +{ + public struct Poly6Kernel + { + public float norm; + public bool norm2D; + + public Poly6Kernel(bool norm2D) + { + this.norm2D = norm2D; + if (norm2D) + norm = 4.0f / math.PI; + else + norm = 315.0f / (64.0f * math.PI); + } + + public float W(float r, float h) + { + float h2 = h * h; + float h4 = h2 * h2; + float h8 = h4 * h4; + + float rl = math.min(r, h); + float hr = h2 - rl * rl; + + if (norm2D) + return norm / h8 * hr * hr * hr; + return norm / (h8 * h) * hr * hr * hr; + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/Poly6Kernel.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/Poly6Kernel.cs.meta new file mode 100644 index 00000000..ccf53314 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/Poly6Kernel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7a3990134524143ac852b488554f6d4e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/SpikyKernel.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/SpikyKernel.cs new file mode 100644 index 00000000..113fbc6b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/SpikyKernel.cs @@ -0,0 +1,35 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; +using Unity.Mathematics; + +namespace Obi +{ + public struct SpikyKernel + { + public float norm; + public bool norm2D; + + public SpikyKernel(bool norm2D) + { + this.norm2D = norm2D; + if (norm2D) + norm = -30.0f / math.PI; + else + norm = -45.0f / math.PI; + } + + public float W(float r, float h) + { + float h2 = h * h; + float h4 = h2 * h2; + + float rl = math.min(r, h); + float hr = h - rl; + + if (norm2D) + return norm / (h4 * h) * hr * hr; + return norm / (h4 * h2) * hr * hr; + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/SpikyKernel.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/SpikyKernel.cs.meta new file mode 100644 index 00000000..d80dd5a9 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/SpikyKernel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a407989bfa0664e9ab75773d1808f549 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance.meta new file mode 100644 index 00000000..4f562f2d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 725436c3a327442cd8b06889111f9b8f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraints.cs new file mode 100644 index 00000000..66ed256b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraints.cs @@ -0,0 +1,26 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; + +namespace Obi +{ + public class BurstDistanceConstraints : BurstConstraintsImpl + { + public BurstDistanceConstraints(BurstSolverImpl solver) : base(solver, Oni.ConstraintType.Distance) + { + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new BurstDistanceConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as BurstDistanceConstraintsBatch); + batch.Destroy(); + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraints.cs.meta new file mode 100644 index 00000000..57833469 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af06abf9c29a04274842dbcb65a2a753 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraintsBatch.cs new file mode 100644 index 00000000..4d83f2e4 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraintsBatch.cs @@ -0,0 +1,146 @@ +#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 +{ + public class BurstDistanceConstraintsBatch : BurstConstraintsBatchImpl, IDistanceConstraintsBatchImpl + { + private NativeArray restLengths; + private NativeArray stiffnesses; + + DistanceConstraintsBatchJob projectConstraints; + ApplyDistanceConstraintsBatchJob applyConstraints; + + public BurstDistanceConstraintsBatch(BurstDistanceConstraints 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.AsNativeArray(); + this.restLengths = restLengths.AsNativeArray(); + this.stiffnesses = stiffnesses.AsNativeArray(); + this.lambdas = lambdas.AsNativeArray(); + m_ConstraintCount = count; + + projectConstraints.particleIndices = this.particleIndices; + projectConstraints.restLengths = this.restLengths; + projectConstraints.stiffnesses = this.stiffnesses; + projectConstraints.lambdas = this.lambdas; + + applyConstraints.particleIndices = this.particleIndices; + } + + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) + { + projectConstraints.positions = solverImplementation.positions; + projectConstraints.invMasses = solverImplementation.invMasses; + projectConstraints.deltas = solverImplementation.positionDeltas; + projectConstraints.counts = solverImplementation.positionConstraintCounts; + projectConstraints.deltaTimeSqr = substepTime * substepTime; + + return projectConstraints.Schedule(m_ConstraintCount, 32, inputDeps); + } + + public override JobHandle Apply(JobHandle inputDeps, float substepTime) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + applyConstraints.positions = solverImplementation.positions; + applyConstraints.deltas = solverImplementation.positionDeltas; + applyConstraints.counts = solverImplementation.positionConstraintCounts; + applyConstraints.sorFactor = parameters.SORFactor; + + return applyConstraints.Schedule(m_ConstraintCount, 64, inputDeps); + } + + [BurstCompile] + public struct DistanceConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] public NativeArray restLengths; + [ReadOnly] public NativeArray stiffnesses; + public NativeArray lambdas; + + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray invMasses; + + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray counts; + + [ReadOnly] public float deltaTimeSqr; + + public void Execute(int i) + { + 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 / deltaTimeSqr; + + // calculate position and lambda deltas: + float4 distance = positions[p1] - positions[p2]; + float d = math.length(distance); + + // calculate constraint value: + float constraint = d - restLengths[i]; + constraint -= math.max(math.min(constraint, 0), -stiffnesses[i].y); + + // calculate lambda and position deltas: + float dlambda = (-constraint - compliance * lambdas[i]) / (w1 + w2 + compliance + BurstMath.epsilon); + float4 delta = dlambda * distance / (d + BurstMath.epsilon); + + lambdas[i] += dlambda; + + deltas[p1] += delta * w1; + deltas[p2] -= delta * w2; + + counts[p1]++; + counts[p2]++; + } + } + + [BurstCompile] + public struct ApplyDistanceConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] public float sorFactor; + + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray positions; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray counts; + + public void Execute(int i) + { + int p1 = particleIndices[i * 2]; + int p2 = particleIndices[i * 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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraintsBatch.cs.meta new file mode 100644 index 00000000..5c4e478c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 31ee5bf24da6847f0b93a69dbbdecf25 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision.meta new file mode 100644 index 00000000..18a7fb3c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 66103ca5acc86407cab9aa94d1e6d1fd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/ApplyBatchedCollisionConstraintsBatchJob.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/ApplyBatchedCollisionConstraintsBatchJob.cs new file mode 100644 index 00000000..170e0840 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/ApplyBatchedCollisionConstraintsBatchJob.cs @@ -0,0 +1,62 @@ +#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] + public struct ApplyBatchedCollisionConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeArray contacts; + + [ReadOnly] public NativeArray simplices; + [ReadOnly] public SimplexCounts simplexCounts; + + [NativeDisableParallelForRestriction] public NativeArray positions; + [NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableParallelForRestriction] public NativeArray counts; + + [NativeDisableParallelForRestriction] public NativeArray orientations; + [NativeDisableParallelForRestriction] public NativeArray orientationDeltas; + [NativeDisableParallelForRestriction] public NativeArray orientationCounts; + + [ReadOnly] public Oni.ConstraintParameters constraintParameters; + [ReadOnly] public BatchData batchData; + + public void Execute(int workItemIndex) + { + int start, end; + batchData.GetConstraintRange(workItemIndex, out start, out end); + + for (int i = start; i < end; ++i) + { + int simplexStartA = simplexCounts.GetSimplexStartAndSize(contacts[i].bodyA, out int simplexSizeA); + int simplexStartB = simplexCounts.GetSimplexStartAndSize(contacts[i].bodyB, out int simplexSizeB); + + for (int j = 0; j < simplexSizeA; ++j) + { + int particleIndex = simplices[simplexStartA + j]; + BurstConstraintsBatchImpl.ApplyPositionDelta(particleIndex, constraintParameters.SORFactor, ref positions, ref deltas, ref counts); + BurstConstraintsBatchImpl.ApplyOrientationDelta(particleIndex, constraintParameters.SORFactor, ref orientations, ref orientationDeltas, ref orientationCounts); + } + + for (int j = 0; j < simplexSizeB; ++j) + { + int particleIndex = simplices[simplexStartB + j]; + BurstConstraintsBatchImpl.ApplyPositionDelta(particleIndex, constraintParameters.SORFactor, ref positions, ref deltas, ref counts); + BurstConstraintsBatchImpl.ApplyOrientationDelta(particleIndex, constraintParameters.SORFactor, ref orientations, ref orientationDeltas, ref orientationCounts); + } + + } + + } + + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/ApplyBatchedCollisionConstraintsBatchJob.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/ApplyBatchedCollisionConstraintsBatchJob.cs.meta new file mode 100644 index 00000000..5b2e6ce6 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/ApplyBatchedCollisionConstraintsBatchJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 96623cff9b30e4504a4a6dbfe3d19ace +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraints.cs new file mode 100644 index 00000000..5401abd7 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraints.cs @@ -0,0 +1,32 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; +using Unity.Jobs; + +namespace Obi +{ + public class BurstParticleCollisionConstraints : BurstConstraintsImpl + { + public BurstParticleCollisionConstraints(BurstSolverImpl solver) : base(solver, Oni.ConstraintType.ParticleCollision) + { + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new BurstParticleCollisionConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as BurstParticleCollisionConstraintsBatch); + batch.Destroy(); + } + + public override int GetConstraintCount() + { + return ((BurstSolverImpl)solver).abstraction.particleContacts.count; + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraints.cs.meta new file mode 100644 index 00000000..41c44704 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8ef36a05943714c1db8f9ee0b28e9c51 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraintsBatch.cs new file mode 100644 index 00000000..e7dafeee --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraintsBatch.cs @@ -0,0 +1,344 @@ +#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 +{ + public class BurstParticleCollisionConstraintsBatch : BurstConstraintsBatchImpl, IParticleCollisionConstraintsBatchImpl + { + public BatchData batchData; + + public BurstParticleCollisionConstraintsBatch(BurstParticleCollisionConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.ParticleCollision; + } + + public BurstParticleCollisionConstraintsBatch(BatchData batchData) : base() + { + this.batchData = batchData; + } + + public override JobHandle Initialize(JobHandle inputDeps, float substepTime) + { + var updateContacts = new UpdateParticleContactsJob() + { + prevPositions = solverImplementation.prevPositions, + prevOrientations = solverImplementation.prevOrientations, + velocities = solverImplementation.velocities, + radii = solverImplementation.principalRadii, + invMasses = solverImplementation.invMasses, + invRotationalMasses = solverImplementation.invRotationalMasses, + + simplices = solverImplementation.simplices, + simplexCounts = solverImplementation.simplexCounts, + + particleMaterialIndices = solverImplementation.collisionMaterials, + collisionMaterials = ObiColliderWorld.GetInstance().collisionMaterials.AsNativeArray(), + + contacts = ((BurstSolverImpl)constraints.solver).abstraction.particleContacts.AsNativeArray(), + effectiveMasses = ((BurstSolverImpl)constraints.solver).abstraction.particleContactEffectiveMasses.AsNativeArray(), + batchData = batchData + }; + + int batchCount = batchData.isLast ? batchData.workItemCount : 1; + return updateContacts.Schedule(batchData.workItemCount, batchCount, inputDeps); + } + + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var projectConstraints = new ParticleCollisionConstraintsBatchJob() + { + positions = solverImplementation.positions, + orientations = solverImplementation.orientations, + invMasses = solverImplementation.invMasses, + radii = solverImplementation.principalRadii, + particleMaterialIndices = solverImplementation.collisionMaterials, + collisionMaterials = ObiColliderWorld.GetInstance().collisionMaterials.AsNativeArray(), + + simplices = solverImplementation.simplices, + simplexCounts = solverImplementation.simplexCounts, + + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + contacts = solverAbstraction.particleContacts.AsNativeArray(), + effectiveMasses = ((BurstSolverImpl)constraints.solver).abstraction.particleContactEffectiveMasses.AsNativeArray(), + batchData = batchData, + + constraintParameters = parameters, + solverParameters = solverImplementation.abstraction.parameters, + gravity = new float4(solverImplementation.abstraction.parameters.gravity, 0), + substepTime = substepTime, + }; + + int batchCount = batchData.isLast ? batchData.workItemCount : 1; + return projectConstraints.Schedule(batchData.workItemCount, batchCount, inputDeps); + } + + public override JobHandle Apply(JobHandle inputDeps, float substepTime) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var applyConstraints = new ApplyBatchedCollisionConstraintsBatchJob() + { + contacts = solverAbstraction.particleContacts.AsNativeArray(), + + simplices = solverImplementation.simplices, + simplexCounts = solverImplementation.simplexCounts, + + positions = solverImplementation.positions, + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + orientations = solverImplementation.orientations, + orientationDeltas = solverImplementation.orientationDeltas, + orientationCounts = solverImplementation.orientationConstraintCounts, + batchData = batchData, + constraintParameters = parameters, + }; + + int batchCount = batchData.isLast ? batchData.workItemCount : 1; + return applyConstraints.Schedule(batchData.workItemCount, batchCount, inputDeps); + } + + /** + * Updates contact data (contact distance and frame) at the beginning of each substep. This is + * necessary because contacts are generated only once at the beginning of each step, not every substep. + */ + [BurstCompile] + public struct UpdateParticleContactsJob : IJobParallelFor + { + [ReadOnly] public NativeArray prevPositions; + [ReadOnly] public NativeArray prevOrientations; + [ReadOnly] public NativeArray velocities; + [ReadOnly] public NativeArray radii; + [ReadOnly] public NativeArray invMasses; + [ReadOnly] public NativeArray invRotationalMasses; + + [ReadOnly] public NativeArray particleMaterialIndices; + [ReadOnly] public NativeArray collisionMaterials; + + // simplex arrays: + [ReadOnly] public NativeArray simplices; + [ReadOnly] public SimplexCounts simplexCounts; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray effectiveMasses; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray contacts; + + [ReadOnly] public BatchData batchData; + + public void Execute(int workItemIndex) + { + int start, end; + batchData.GetConstraintRange(workItemIndex, out start, out end); + + 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); + + float4 simplexVelocityA = float4.zero; + float4 simplexPrevPositionA = float4.zero; + quaternion simplexPrevOrientationA = new quaternion(0, 0, 0, 0); + float simplexRadiusA = 0; + float simplexInvMassA = 0; + 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; + float simplexInvRotationalMassB = 0; + + for (int j = 0; j < simplexSizeA; ++j) + { + int particleIndex = simplices[simplexStartA + j]; + simplexVelocityA += velocities[particleIndex] * contact.pointA[j]; + simplexPrevPositionA += prevPositions[particleIndex] * contact.pointA[j]; + simplexPrevOrientationA.value += prevOrientations[particleIndex].value * contact.pointA[j]; + simplexInvMassA += invMasses[particleIndex] * contact.pointA[j]; + simplexInvRotationalMassA += invRotationalMasses[particleIndex] * contact.pointA[j]; + simplexRadiusA += BurstMath.EllipsoidRadius(contact.normal, prevOrientations[particleIndex], radii[particleIndex].xyz) * contact.pointA[j]; + } + + for (int j = 0; j < simplexSizeB; ++j) + { + int particleIndex = simplices[simplexStartB + j]; + simplexVelocityB += velocities[particleIndex] * contact.pointB[j]; + simplexPrevPositionB += prevPositions[particleIndex] * contact.pointB[j]; + simplexPrevOrientationB.value += prevOrientations[particleIndex].value * contact.pointB[j]; + simplexInvMassB += invMasses[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); + + // calculate contact points: + float4 contactPointA = simplexPrevPositionB + contact.normal * (contact.distance + simplexRadiusB); + float4 contactPointB = simplexPrevPositionA - contact.normal * (contact.distance + simplexRadiusA); + + // update contact basis: + contact.CalculateTangent(simplexVelocityA - simplexVelocityB); + + // update contact masses: + int aMaterialIndex = particleMaterialIndices[simplices[simplexStartA]]; + int bMaterialIndex = particleMaterialIndices[simplices[simplexStartB]]; + bool rollingContacts = (aMaterialIndex >= 0 ? collisionMaterials[aMaterialIndex].rollingContacts > 0 : false) | + (bMaterialIndex >= 0 ? collisionMaterials[bMaterialIndex].rollingContacts > 0 : false); + + 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; + } + } + } + + [BurstCompile] + public struct ParticleCollisionConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeArray orientations; + [ReadOnly] public NativeArray invMasses; + [ReadOnly] public NativeArray radii; + [ReadOnly] public NativeArray particleMaterialIndices; + [ReadOnly] public NativeArray collisionMaterials; + + // simplex arrays: + [ReadOnly] public NativeArray simplices; + [ReadOnly] public SimplexCounts simplexCounts; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray positions; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray counts; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray contacts; + [ReadOnly] public NativeArray effectiveMasses; + + [ReadOnly] public Oni.ConstraintParameters constraintParameters; + [ReadOnly] public Oni.SolverParameters solverParameters; + [ReadOnly] public float4 gravity; + [ReadOnly] public float substepTime; + + [ReadOnly] public BatchData batchData; + + public void Execute(int workItemIndex) + { + int start, end; + batchData.GetConstraintRange(workItemIndex, out start, out end); + + for (int i = start; i < end; ++i) + { + var contact = contacts[i]; + + 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; + + 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]; + } + 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]; + } + + float4 posA = simplexPositionA - contact.normal * simplexRadiusA; + float4 posB = simplexPositionB + contact.normal * simplexRadiusB; + + // adhesion: + float lambda = contact.SolveAdhesion(effectiveMasses[i].TotalNormalInvMass, posA, posB, material.stickDistance, material.stickiness, substepTime); + + // depenetration: + 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) + { + float shock = solverParameters.shockPropagation * math.dot(contact.normal, math.normalizesafe(gravity)); + float4 delta = lambda * contact.normal; + + float baryScale = BurstMath.BaryScale(contact.pointA); + for (int j = 0; j < simplexSizeA; ++j) + { + int particleIndex = simplices[simplexStartA + j]; + deltas[particleIndex] += delta * invMasses[particleIndex] * contact.pointA[j] * baryScale * (1 - shock); + counts[particleIndex]++; + } + + baryScale = BurstMath.BaryScale(contact.pointB); + for (int j = 0; j < simplexSizeB; ++j) + { + int particleIndex = simplices[simplexStartB + j]; + deltas[particleIndex] -= delta * invMasses[particleIndex] * contact.pointB[j] * baryScale * (1 + shock); + counts[particleIndex]++; + } + } + + // 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); + } + + for (int j = 0; j < simplexSizeB; ++j) + { + int particleIndex = simplices[simplexStartB + j]; + BurstConstraintsBatchImpl.ApplyPositionDelta(particleIndex, constraintParameters.SORFactor, ref positions, ref deltas, ref counts); + } + } + + contacts[i] = contact; + } + } + + private BurstCollisionMaterial CombineCollisionMaterials(int entityA, int entityB) + { + // Combine collision materials: + int aMaterialIndex = particleMaterialIndices[entityA]; + int bMaterialIndex = particleMaterialIndices[entityB]; + + if (aMaterialIndex >= 0 && bMaterialIndex >= 0) + return BurstCollisionMaterial.CombineWith(collisionMaterials[aMaterialIndex], collisionMaterials[bMaterialIndex]); + else if (aMaterialIndex >= 0) + return collisionMaterials[aMaterialIndex]; + else if (bMaterialIndex >= 0) + return collisionMaterials[bMaterialIndex]; + + return new BurstCollisionMaterial(); + } + } + + + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraintsBatch.cs.meta new file mode 100644 index 00000000..18a62f38 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 61f5c3e93290646948b251d617f01c8d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraints.cs new file mode 100644 index 00000000..0eda6086 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraints.cs @@ -0,0 +1,31 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; + +namespace Obi +{ + public class BurstParticleFrictionConstraints : BurstConstraintsImpl + { + public BurstParticleFrictionConstraints(BurstSolverImpl solver) : base(solver, Oni.ConstraintType.ParticleFriction) + { + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new BurstParticleFrictionConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as BurstParticleFrictionConstraintsBatch); + batch.Destroy(); + } + + public override int GetConstraintCount() + { + return ((BurstSolverImpl)solver).abstraction.particleContacts.count; + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraints.cs.meta new file mode 100644 index 00000000..b28ae4e1 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 63dade0c384ee4c1398ddf4d60038764 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraintsBatch.cs new file mode 100644 index 00000000..b98aacc1 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraintsBatch.cs @@ -0,0 +1,289 @@ +#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 +{ + public class BurstParticleFrictionConstraintsBatch : BurstConstraintsBatchImpl, IParticleFrictionConstraintsBatchImpl + { + public BatchData batchData; + + public BurstParticleFrictionConstraintsBatch(BurstParticleFrictionConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.ParticleFriction; + } + + public BurstParticleFrictionConstraintsBatch(BatchData batchData) : base() + { + this.batchData = batchData; + } + + public override JobHandle Initialize(JobHandle inputDeps, float substepTime) + { + return inputDeps; + } + + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) + { + + var projectConstraints = new ParticleFrictionConstraintsBatchJob() + { + positions = solverImplementation.positions, + prevPositions = solverImplementation.prevPositions, + orientations = solverImplementation.orientations, + prevOrientations = solverImplementation.prevOrientations, + + invMasses = solverImplementation.invMasses, + invRotationalMasses = solverImplementation.invRotationalMasses, + radii = solverImplementation.principalRadii, + particleMaterialIndices = solverImplementation.collisionMaterials, + collisionMaterials = ObiColliderWorld.GetInstance().collisionMaterials.AsNativeArray(), + + simplices = solverImplementation.simplices, + simplexCounts = solverImplementation.simplexCounts, + + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + orientationDeltas = solverImplementation.orientationDeltas, + orientationCounts = solverImplementation.orientationConstraintCounts, + contacts = ((BurstSolverImpl)constraints.solver).abstraction.particleContacts.AsNativeArray(), + effectiveMasses = ((BurstSolverImpl)constraints.solver).abstraction.particleContactEffectiveMasses.AsNativeArray(), + + batchData = batchData, + substepTime = substepTime, + }; + + int batchCount = batchData.isLast ? batchData.workItemCount : 1; + return projectConstraints.Schedule(batchData.workItemCount, batchCount, inputDeps); + } + + public override JobHandle Apply(JobHandle inputDeps, float substepTime) + { + + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var applyConstraints = new ApplyBatchedCollisionConstraintsBatchJob() + { + contacts = solverAbstraction.particleContacts.AsNativeArray(), + + simplices = solverImplementation.simplices, + simplexCounts = solverImplementation.simplexCounts, + + positions = solverImplementation.positions, + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + orientations = solverImplementation.orientations, + orientationDeltas = solverImplementation.orientationDeltas, + orientationCounts = solverImplementation.orientationConstraintCounts, + constraintParameters = parameters, + batchData = batchData + }; + + int batchCount = batchData.isLast ? batchData.workItemCount : 1; + return applyConstraints.Schedule(batchData.workItemCount, batchCount, inputDeps); + } + + [BurstCompile] + public struct ParticleFrictionConstraintsBatchJob : IJobParallelFor + { + + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray prevPositions; + [ReadOnly] public NativeArray orientations; + [ReadOnly] public NativeArray prevOrientations; + + [ReadOnly] public NativeArray invMasses; + [ReadOnly] public NativeArray invRotationalMasses; + [ReadOnly] public NativeArray radii; + [ReadOnly] public NativeArray particleMaterialIndices; + [ReadOnly] public NativeArray collisionMaterials; + + // simplex arrays: + [ReadOnly] public NativeArray simplices; + [ReadOnly] public SimplexCounts simplexCounts; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray counts; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray orientationDeltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray orientationCounts; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray contacts; + [ReadOnly] public NativeArray effectiveMasses; + + [ReadOnly] public BatchData batchData; + [ReadOnly] public float substepTime; + + public void Execute(int workItemIndex) + { + int start, end; + batchData.GetConstraintRange(workItemIndex, out start, out end); + + for (int i = start; i < end; ++i) + { + var contact = contacts[i]; + + 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 prevPositionA = float4.zero; + float4 linearVelocityA = float4.zero; + float4 angularVelocityA = float4.zero; + float invRotationalMassA = 0; + quaternion orientationA = new quaternion(0, 0, 0, 0); + float4 simplexRadiiA = float4.zero; + + float4 prevPositionB = float4.zero; + float4 linearVelocityB = float4.zero; + float4 angularVelocityB = float4.zero; + float invRotationalMassB = 0; + quaternion orientationB = new quaternion(0, 0, 0, 0); + float4 simplexRadiiB = float4.zero; + + for (int j = 0; j < simplexSizeA; ++j) + { + int particleIndex = simplices[simplexStartA + j]; + 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]; + invRotationalMassA += invRotationalMasses[particleIndex] * contact.pointA[j]; + orientationA.value += orientations[particleIndex].value * contact.pointA[j]; + simplexRadiiA += radii[particleIndex] * contact.pointA[j]; + } + for (int j = 0; j < simplexSizeB; ++j) + { + int particleIndex = simplices[simplexStartB + j]; + 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]; + invRotationalMassB += invRotationalMasses[particleIndex] * contact.pointB[j]; + orientationB.value += orientations[particleIndex].value * contact.pointB[j]; + simplexRadiiB += radii[particleIndex] * contact.pointB[j]; + } + + float4 rA = float4.zero, rB = float4.zero; + + // Consider angular velocities if rolling contacts are enabled: + if (material.rollingContacts > 0) + { + 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); + } + + // Calculate relative velocity: + float4 relativeVelocity = linearVelocityA - linearVelocityB; + + // 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) + { + float4 tangentImpulse = impulses.x * contact.tangent; + float4 bitangentImpulse = impulses.y * contact.bitangent; + float4 totalImpulse = tangentImpulse + bitangentImpulse; + + float baryScale = BurstMath.BaryScale(contact.pointA); + for (int j = 0; j < simplexSizeA; ++j) + { + int particleIndex = simplices[simplexStartA + j]; + deltas[particleIndex] += (tangentImpulse * effectiveMasses[i].tangentInvMassA + bitangentImpulse * effectiveMasses[i].bitangentInvMassA) * substepTime * contact.pointA[j] * baryScale; + counts[particleIndex]++; + } + + baryScale = BurstMath.BaryScale(contact.pointB); + for (int j = 0; j < simplexSizeB; ++j) + { + int particleIndex = simplices[simplexStartB + j]; + 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); + + float4 angVelDeltaA = math.mul(solverInertiaA, new float4(math.cross(rA.xyz, totalImpulse.xyz), 0)); + float4 angVelDeltaB = -math.mul(solverInertiaB, new float4(math.cross(rB.xyz, totalImpulse.xyz), 0)); + + // Final angular velocities, after adding the deltas: + angularVelocityA += angVelDeltaA; + angularVelocityB += angVelDeltaB; + + // Calculate weights (inverse masses): + float invMassA = math.length(math.mul(solverInertiaA, math.normalizesafe(angularVelocityA))); + float invMassB = math.length(math.mul(solverInertiaB, math.normalizesafe(angularVelocityB))); + + // Calculate rolling axis and angular velocity deltas: + float4 rollAxis = float4.zero; + float rollingImpulse = contact.SolveRollingFriction(angularVelocityA, angularVelocityB, material.rollingFriction, invMassA, invMassB, ref rollAxis); + angVelDeltaA += rollAxis * rollingImpulse * invMassA; + angVelDeltaB -= rollAxis * rollingImpulse * invMassB; + + // Apply orientation deltas to particles: + quaternion orientationDeltaA = BurstIntegration.AngularVelocityToSpinQuaternion(orientationA, angVelDeltaA, substepTime); + quaternion orientationDeltaB = BurstIntegration.AngularVelocityToSpinQuaternion(orientationB, angVelDeltaB, substepTime); + + for (int j = 0; j < simplexSizeA; ++j) + { + int particleIndex = simplices[simplexStartA + j]; + quaternion qA = orientationDeltas[particleIndex]; + qA.value += orientationDeltaA.value; + orientationDeltas[particleIndex] = qA; + orientationCounts[particleIndex]++; + } + + for (int j = 0; j < simplexSizeB; ++j) + { + int particleIndex = simplices[simplexStartB + j]; + quaternion qB = orientationDeltas[particleIndex]; + qB.value += orientationDeltaB.value; + orientationDeltas[particleIndex] = qB; + orientationCounts[particleIndex]++; + } + } + } + + contacts[i] = contact; + } + } + + private BurstCollisionMaterial CombineCollisionMaterials(int entityA, int entityB) + { + // Combine collision materials: + int aMaterialIndex = particleMaterialIndices[entityA]; + int bMaterialIndex = particleMaterialIndices[entityB]; + + if (aMaterialIndex >= 0 && bMaterialIndex >= 0) + return BurstCollisionMaterial.CombineWith(collisionMaterials[aMaterialIndex], collisionMaterials[bMaterialIndex]); + else if (aMaterialIndex >= 0) + return collisionMaterials[aMaterialIndex]; + else if (bMaterialIndex >= 0) + return collisionMaterials[bMaterialIndex]; + + return new BurstCollisionMaterial(); + } + } + + + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraintsBatch.cs.meta new file mode 100644 index 00000000..17dfb971 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9a942dd261ea741b69997eba73462034 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin.meta new file mode 100644 index 00000000..d0bbb0cf --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dcbc7b9bf37704bd3945f0fb82506bfb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraints.cs new file mode 100644 index 00000000..53004013 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraints.cs @@ -0,0 +1,26 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; + +namespace Obi +{ + public class BurstPinConstraints : BurstConstraintsImpl + { + public BurstPinConstraints(BurstSolverImpl solver) : base(solver, Oni.ConstraintType.Pin) + { + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new BurstPinConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as BurstPinConstraintsBatch); + batch.Destroy(); + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraints.cs.meta new file mode 100644 index 00000000..8a357a98 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 73ae545b061fa4db988fd3b64410fc6d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraintsBatch.cs new file mode 100644 index 00000000..498ab984 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraintsBatch.cs @@ -0,0 +1,354 @@ +#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 BurstPinConstraintsBatch : BurstConstraintsBatchImpl, IPinConstraintsBatchImpl + { + private NativeArray colliderIndices; + private NativeArray offsets; + private NativeArray restDarbouxVectors; + private NativeArray stiffnesses; + + public BurstPinConstraintsBatch(BurstPinConstraints 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.AsNativeArray(); + this.colliderIndices = colliderIndices.AsNativeArray(); + this.offsets = offsets.AsNativeArray(); + this.restDarbouxVectors = restDarbouxVectors.AsNativeArray(); + this.stiffnesses = stiffnesses.AsNativeArray(); + this.lambdas = lambdas.AsNativeArray(); + m_ConstraintCount = count; + } + + public override JobHandle Initialize(JobHandle inputDeps, float substepTime) + { + 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, substepTime); + } + + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) + { + var projectConstraints = new PinConstraintsBatchJob() + { + particleIndices = particleIndices, + colliderIndices = colliderIndices, + offsets = offsets, + stiffnesses = stiffnesses, + restDarboux = restDarbouxVectors, + lambdas = lambdas.Reinterpret(), + + positions = solverImplementation.positions, + prevPositions = solverImplementation.prevPositions, + invMasses = solverImplementation.invMasses, + orientations = solverImplementation.orientations, + invRotationalMasses = solverImplementation.invRotationalMasses, + + 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, + orientationDeltas = solverImplementation.orientationDeltas, + orientationCounts = solverImplementation.orientationConstraintCounts, + + 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 parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var applyConstraints = new ApplyPinConstraintsBatchJob() + { + particleIndices = particleIndices, + + positions = solverImplementation.positions, + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + + orientations = solverImplementation.orientations, + orientationDeltas = solverImplementation.orientationDeltas, + orientationCounts = solverImplementation.orientationConstraintCounts, + + sorFactor = parameters.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 + { + [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.Increment(ref arr[rigidbodyIndex].constraintCount); + } + } + } + + [BurstCompile] + public unsafe struct PinConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] public NativeArray colliderIndices; + + [ReadOnly] public NativeArray offsets; + [ReadOnly] public NativeArray stiffnesses; + [ReadOnly] public NativeArray restDarboux; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray lambdas; + + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray prevPositions; + [ReadOnly] public NativeArray invMasses; + [ReadOnly] public NativeArray orientations; + [ReadOnly] public NativeArray invRotationalMasses; + + [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; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray orientationDeltas; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray orientationCounts; + + [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 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) + { + var rigidbody = rigidbodies[rigidbodyIndex]; + + // predict rigidbody transform: + var predictedTrfm = transforms[colliderIndex].Integrate(rigidbody.velocity + rigidbodyLinearDeltas[rigidbodyIndex], + rigidbody.angularVelocity + rigidbodyAngularDeltas[rigidbodyIndex], frameEnd); + + // predict offset point position and rb rotation at the end of the step: + predictedPinOffset = predictedTrfm.TransformPoint(offsets[i]); + predictedRotation = predictedTrfm.rotation; + + // 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; + + } + + // 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.xyz) > math.lengthsq(omega_plus.value.xyz)) + 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; + } + } + + [BurstCompile] + public struct ApplyPinConstraintsBatchJob : IJob + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] public float sorFactor; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray positions; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray counts; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray orientations; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray orientationDeltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray orientationCounts; + + [ReadOnly] public int activeConstraintCount; + + public void Execute() + { + for (int i = 0; i < activeConstraintCount; ++i) + { + int p1 = particleIndices[i]; + + if (counts[p1] > 0) + { + positions[p1] += deltas[p1] * sorFactor / counts[p1]; + deltas[p1] = float4.zero; + counts[p1] = 0; + } + + if (orientationCounts[p1] > 0) + { + quaternion q = orientations[p1]; + q.value += orientationDeltas[p1].value * sorFactor / orientationCounts[p1]; + orientations[p1] = math.normalize(q); + + orientationDeltas[p1] = new quaternion(0, 0, 0, 0); + orientationCounts[p1] = 0; + } + } + } + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraintsBatch.cs.meta new file mode 100644 index 00000000..36ea9d25 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a383dd79fc24448059bb45283b12a52b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching.meta new file mode 100644 index 00000000..63ebf86a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bf9959ac1dc214a0799c42583ae2cbdb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraints.cs new file mode 100644 index 00000000..562da3ad --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraints.cs @@ -0,0 +1,26 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; + +namespace Obi +{ + public class BurstShapeMatchingConstraints : BurstConstraintsImpl + { + public BurstShapeMatchingConstraints(BurstSolverImpl solver) : base(solver, Oni.ConstraintType.ShapeMatching) + { + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new BurstShapeMatchingConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as BurstShapeMatchingConstraintsBatch); + batch.Destroy(); + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraints.cs.meta new file mode 100644 index 00000000..4827c585 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cf31f7a95aadc4c85a69a3400ba30608 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraintsBatch.cs new file mode 100644 index 00000000..27899b25 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraintsBatch.cs @@ -0,0 +1,472 @@ +#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 +{ + public class BurstShapeMatchingConstraintsBatch : BurstConstraintsBatchImpl, IShapeMatchingConstraintsBatchImpl + { + private NativeArray firstIndex; + private NativeArray numIndices; + private NativeArray explicitGroup; + private NativeArray shapeMaterialParameters; + private NativeArray restComs; + private NativeArray coms; + private NativeArray constraintOrientations; + + private NativeArray Aqq; + private NativeArray linearTransforms; + private NativeArray plasticDeformations; + + private bool m_RecalculateRestShape = false; + + public BurstShapeMatchingConstraintsBatch(BurstShapeMatchingConstraints 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.AsNativeArray(); + this.firstIndex = firstIndex.AsNativeArray(); + this.numIndices = numIndices.AsNativeArray(); + this.explicitGroup = explicitGroup.AsNativeArray(); + this.shapeMaterialParameters = shapeMaterialParameters.AsNativeArray(); + this.restComs = restComs.AsNativeArray(); + this.coms = coms.AsNativeArray(); + this.constraintOrientations = constraintOrientations.AsNativeArray(); + this.linearTransforms = linearTransforms.AsNativeArray(); + this.plasticDeformations = plasticDeformations.AsNativeArray(); + + if (Aqq.IsCreated) + Aqq.Dispose(); + + Aqq = new NativeArray(count,Allocator.Persistent); + + m_ConstraintCount = count; + } + + public override void Destroy() + { + if (Aqq.IsCreated) + Aqq.Dispose(); + } + + public override JobHandle Initialize(JobHandle inputDeps, float substepTime) + { + return inputDeps; + } + + 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, + firstIndex = firstIndex, + numIndices = numIndices, + explicitGroup = explicitGroup, + shapeMaterialParameters = shapeMaterialParameters, + restComs = restComs, + coms = coms, + constraintOrientations = constraintOrientations, + Aqq = Aqq, + linearTransforms = linearTransforms, + deformation = plasticDeformations, + + positions = solverImplementation.positions, + restPositions = solverImplementation.restPositions, + orientations = solverImplementation.orientations, + restOrientations = solverImplementation.restOrientations, + invMasses = solverImplementation.invMasses, + invRotationalMasses = solverImplementation.invRotationalMasses, + principalRadii = solverImplementation.principalRadii, + + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + + deltaTime = substepTime + }; + + return projectConstraints.Schedule(m_ConstraintCount, 4, inputDeps); + } + + public override JobHandle Apply(JobHandle inputDeps, float substepTime) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var applyConstraints = new ApplyShapeMatchingConstraintsBatchJob() + { + particleIndices = particleIndices, + firstIndex = firstIndex, + numIndices = numIndices, + + positions = solverImplementation.positions, + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + + sorFactor = parameters.SORFactor + }; + + return applyConstraints.Schedule(m_ConstraintCount, 8, inputDeps); + } + + public void CalculateRestShapeMatching() + { + m_RecalculateRestShape = true; + } + + protected static void RecalculateRestData(int i, + ref NativeArray particleIndices, + ref NativeArray firstIndex, + ref NativeArray restComs, + ref NativeArray Aqq, + ref NativeArray deformation, + ref NativeArray numIndices, + ref NativeArray invMasses, + ref NativeArray invRotationalMasses, + ref NativeArray restPositions, + ref NativeArray restOrientations, + ref NativeArray principalRadii) + { + int k = 0; + float maximumMass = 10000; + + // initialize rest center of mass and shape matrix: + restComs[i] = float4.zero; + Aqq[i] = float4x4.zero; + + float4 restCom = float4.zero; + float4x4 _Aqq = float4x4.zero, _Rqq = float4x4.zero; + + // calculate rest center of mass, shape mass and 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 = restOrientations[k].toMatrix(); + particleR[3][3] = 0; + + _Rqq += math.mul(particleR, + math.mul(BurstMath.GetParticleInertiaTensor(principalRadii[k], invRotationalMasses[k]).asDiagonal(), + math.transpose(particleR)) + ); + + float4 restPosition = restPositions[k]; + restPosition[3] = 0; + + _Aqq += mass * BurstMath.multrnsp4(restPosition, restPosition); + + } + + + if (restCom[3] < BurstMath.epsilon) + return; + + restCom.xyz /= restCom[3]; + restComs[i] = restCom; + + restCom[3] = 0; + _Aqq -= restComs[i][3] * BurstMath.multrnsp4(restCom, restCom); + _Aqq[3][3] = 1; // so that the determinant is never 0 due to all-zeros row/column. + + Aqq[i] = math.inverse(_Rqq + math.mul(deformation[i], math.mul(_Aqq, math.transpose(deformation[i])))); + } + + [BurstCompile] + public struct ShapeMatchingCalculateRestJob : IJobParallelFor + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] public NativeArray firstIndex; + [ReadOnly] public NativeArray numIndices; + public NativeArray restComs; + [ReadOnly] public NativeArray coms; + + public NativeArray Aqq; + [ReadOnly] public NativeArray deformation; + + [ReadOnly] public NativeArray restPositions; + [ReadOnly] public NativeArray restOrientations; + [ReadOnly] public NativeArray invMasses; + [ReadOnly] public NativeArray invRotationalMasses; + [ReadOnly] public NativeArray principalRadii; + + public void Execute(int i) + { + RecalculateRestData(i, + ref particleIndices, + ref firstIndex, + ref restComs, + ref Aqq, + ref deformation, + ref numIndices, + ref invMasses, + ref invRotationalMasses, + ref restPositions, + ref restOrientations, + ref principalRadii); + } + } + + [BurstCompile] + public struct ShapeMatchingConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] public NativeArray firstIndex; + [ReadOnly] public NativeArray numIndices; + [ReadOnly] public NativeArray explicitGroup; + [ReadOnly] public NativeArray shapeMaterialParameters; + public NativeArray restComs; + public NativeArray coms; + public NativeArray constraintOrientations; + + public NativeArray Aqq; + public NativeArray linearTransforms; + public NativeArray deformation; + + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray restPositions; + + [ReadOnly] public NativeArray restOrientations; + [ReadOnly] public NativeArray invMasses; + [ReadOnly] public NativeArray invRotationalMasses; + [ReadOnly] public NativeArray principalRadii; + + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray orientations; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray counts; + + [ReadOnly] public float deltaTime; + + public void Execute(int i) + { + 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: + 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]; + + coms[i] += positions[k] * mass; + + float4x4 particleR = orientations[k].toMatrix(); + float4x4 particleRT = restOrientations[k].toMatrix(); + particleR[3][3] = 0; + particleRT[3][3] = 0; + + Rpq += math.mul(particleR, + math.mul(BurstMath.GetParticleInertiaTensor(principalRadii[k], invRotationalMasses[k]).asDiagonal(), + math.transpose(particleRT)) + ); + + float4 restPosition = restPositions[k]; + restPosition[3] = 0; + + Apq += mass * BurstMath.multrnsp4(positions[k], restPosition); + } + + if (restComs[i][3] < BurstMath.epsilon) + return; + + coms[i] /= restComs[i][3]; + + // subtract global shape moment: + float4 restCom = restComs[i]; + restCom[3] = 0; + + Apq -= restComs[i][3] * BurstMath.multrnsp4(coms[i], restCom); + + // calculate optimal transform including plastic deformation: + float4x4 Apq_def = Rpq + math.mul(Apq , math.transpose(deformation[i])); + Apq_def[3][3] = 1; + + // reconstruct full best-matching linear transform: + 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], 5); + + // finally, obtain rotation matrix: + float4x4 R = constraintOrientations[i].toMatrix(); + R[3][3] = 0; + + // 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] = math.mul(constraintOrientations[i], restOrientations[k]); + } + } + else + { + // set orientation of center particle only: + int centerIndex = particleIndices[firstIndex[i]]; + orientations[centerIndex] = math.mul(constraintOrientations[i], restOrientations[centerIndex]); + } + + // calculate and accumulate particle goal positions: + float4 goal; + float4x4 transform = math.mul(R,deformation[i]); + for (int j = 0; j < numIndices[i]; ++j) + { + k = particleIndices[firstIndex[i] + j]; + goal = coms[i] + math.mul(transform, restPositions[k] - restComs[i]); + deltas[k] += (goal - positions[k]) * shapeMaterialParameters[i * 5]; + counts[k]++; + } + + // update plastic deformation: + 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) + { + R[3][3] = 1; + + // get scale matrix (A = RS so S = Rt * A) and its deviation from the identity matrix: + float4x4 deform_matrix = math.mul(math.transpose(R), linearTransforms[i]) - float4x4.identity; + + // if the amount of deformation exceeds the yield threshold: + float norm = deform_matrix.frobeniusNorm(); + if (norm > plastic_yield) + { + // deform the shape permanently: + deformation[i] = math.mul(float4x4.identity + plastic_creep * deform_matrix, deformation[i]); + + // clamp deformation so that it does not exceed a percentage; + deform_matrix = deformation[i] - float4x4.identity; + norm = deform_matrix.frobeniusNorm(); + if (norm > max_deform) + { + 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, + ref particleIndices, + ref firstIndex, + ref restComs, + ref Aqq, + ref deformation, + ref numIndices, + ref invMasses, + ref invRotationalMasses, + ref restPositions, + ref restOrientations, + ref principalRadii); + } + } + + // if we can recover from plastic deformation, lerp towards non-deformed shape and recalculate rest shape: + if (plastic_recovery > 0) + { + deformation[i] += (float4x4.identity - deformation[i]) * math.min(plastic_recovery * deltaTime, 1.0f); + RecalculateRestData(i, + ref particleIndices, + ref firstIndex, + ref restComs, + ref Aqq, + ref deformation, + ref numIndices, + ref invMasses, + ref invRotationalMasses, + ref restPositions, + ref restOrientations, + ref principalRadii); + } + } + } + + [BurstCompile] + public struct ApplyShapeMatchingConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] public NativeArray firstIndex; + [ReadOnly] public NativeArray numIndices; + [ReadOnly] public float sorFactor; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray positions; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray counts; + + public void Execute(int i) + { + int first = firstIndex[i]; + int last = first + numIndices[i]; + + for (int k = first; k < last; ++k) + { + int p = particleIndices[k]; + if (counts[p] > 0) + { + positions[p] += deltas[p] * sorFactor / counts[p]; + deltas[p] = float4.zero; + counts[p] = 0; + } + } + } + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraintsBatch.cs.meta new file mode 100644 index 00000000..aedc5627 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5a532b712a8e34bf8a610d420174d9b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin.meta new file mode 100644 index 00000000..b8d49053 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: da67648eb6cfe43fbb5574da14d23dc6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraints.cs new file mode 100644 index 00000000..e823e01c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraints.cs @@ -0,0 +1,26 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; + +namespace Obi +{ + public class BurstSkinConstraints : BurstConstraintsImpl + { + public BurstSkinConstraints(BurstSolverImpl solver) : base(solver, Oni.ConstraintType.Skin) + { + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new BurstSkinConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as BurstSkinConstraintsBatch); + batch.Destroy(); + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraints.cs.meta new file mode 100644 index 00000000..65f8d748 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f501f9a4acdd34395a31db88db413cb7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraintsBatch.cs new file mode 100644 index 00000000..85d1a979 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraintsBatch.cs @@ -0,0 +1,151 @@ +#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 +{ + public class BurstSkinConstraintsBatch : BurstConstraintsBatchImpl, ISkinConstraintsBatchImpl + { + private NativeArray skinPoints; + private NativeArray skinNormals; + private NativeArray skinRadiiBackstop; + private NativeArray skinCompliance; + + public BurstSkinConstraintsBatch(BurstSkinConstraints 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.AsNativeArray(); + this.skinPoints = skinPoints.AsNativeArray(); + this.skinNormals = skinNormals.AsNativeArray(); + this.skinRadiiBackstop = skinRadiiBackstop.AsNativeArray(); + this.skinCompliance = skinCompliance.AsNativeArray(); + this.lambdas = lambdas.AsNativeArray(); + m_ConstraintCount = count; + } + + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) + { + var projectConstraints = new SkinConstraintsBatchJob() + { + particleIndices = particleIndices, + skinPoints = skinPoints, + skinNormals = skinNormals, + skinRadiiBackstop = skinRadiiBackstop.Reinterpret(), + skinCompliance = skinCompliance, + lambdas = lambdas, + positions = solverImplementation.positions, + invMasses = solverImplementation.invMasses, + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + deltaTimeSqr = substepTime * substepTime + }; + + return projectConstraints.Schedule(m_ConstraintCount, 32, inputDeps); + } + + public override JobHandle Apply(JobHandle inputDeps, float substepTime) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var applyConstraints = new ApplySkinConstraintsBatchJob() + { + particleIndices = particleIndices, + + positions = solverImplementation.positions, + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + + sorFactor = parameters.SORFactor + }; + + return applyConstraints.Schedule(m_ConstraintCount, 64, inputDeps); + } + + [BurstCompile] + public struct SkinConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] public NativeArray skinPoints; + [ReadOnly] public NativeArray skinNormals; + [ReadOnly] public NativeArray skinRadiiBackstop; + [ReadOnly] public NativeArray skinCompliance; + public NativeArray lambdas; + + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray invMasses; + + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray counts; + + [ReadOnly] public float deltaTimeSqr; + + public void Execute(int i) + { + float radius = skinRadiiBackstop[i].x; + float collisionRadius = skinRadiiBackstop[i].y; + float backstopDistance = collisionRadius + skinRadiiBackstop[i].z; + + float compliance = skinCompliance[i] / deltaTimeSqr; + 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 = math.length(toSkin); + float b = math.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 = math.max(0,d - radius); + float dlambda = (-constraint - compliance * lambdas[i]) / (1 + compliance); + lambdas[i] += dlambda; + deltas[p] += dlambda * toSkin / (d + BurstMath.epsilon); + counts[p]++; + + // constrain particle outside the backstop sphere (0 compliance): + constraint = math.min(0, b - collisionRadius); + deltas[p] -= constraint * toBackstop / (b + BurstMath.epsilon); + } + + } + } + + [BurstCompile] + public struct ApplySkinConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] public float sorFactor; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray positions; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray counts; + + public void Execute(int i) + { + int p1 = particleIndices[i]; + + if (counts[p1] > 0) + { + positions[p1] += deltas[p1] * sorFactor / counts[p1]; + deltas[p1] = float4.zero; + counts[p1] = 0; + } + } + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraintsBatch.cs.meta new file mode 100644 index 00000000..8bb9f764 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b78797a70a67646fe84c09d533a1bba9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch.meta new file mode 100644 index 00000000..90264746 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5d27732f644a64569a0e8a1595d1f2a7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraints.cs new file mode 100644 index 00000000..2856d130 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraints.cs @@ -0,0 +1,26 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; + +namespace Obi +{ + public class BurstStitchConstraints : BurstConstraintsImpl + { + public BurstStitchConstraints(BurstSolverImpl solver) : base(solver, Oni.ConstraintType.Stitch) + { + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new BurstStitchConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as BurstStitchConstraintsBatch); + batch.Destroy(); + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraints.cs.meta new file mode 100644 index 00000000..8282ae03 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c0e33ed168e3c497b96274c765a12550 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraintsBatch.cs new file mode 100644 index 00000000..934e06c4 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraintsBatch.cs @@ -0,0 +1,152 @@ +#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 +{ + public class BurstStitchConstraintsBatch : BurstConstraintsBatchImpl, IStitchConstraintsBatchImpl + { + private NativeArray stiffnesses; + + public BurstStitchConstraintsBatch(BurstStitchConstraints constraints) + { + m_Constraints = constraints; + m_ConstraintType = Oni.ConstraintType.Stitch; + } + + public void SetStitchConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList stiffnesses, ObiNativeFloatList lambdas, int count) + { + this.particleIndices = particleIndices.AsNativeArray(); + this.stiffnesses = stiffnesses.AsNativeArray(); + this.lambdas = lambdas.AsNativeArray(); + m_ConstraintCount = count; + } + + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) + { + var projectConstraints = new StitchConstraintsBatchJob() + { + particleIndices = particleIndices, + stiffnesses = stiffnesses, + lambdas = lambdas, + positions = solverImplementation.positions, + invMasses = solverImplementation.invMasses, + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + deltaTimeSqr = substepTime * substepTime, + activeConstraintCount = m_ConstraintCount + }; + + return projectConstraints.Schedule(inputDeps); + } + + public override JobHandle Apply(JobHandle inputDeps, float substepTime) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var applyConstraints = new ApplyStitchConstraintsBatchJob() + { + particleIndices = particleIndices, + + positions = solverImplementation.positions, + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + + sorFactor = parameters.SORFactor, + activeConstraintCount = m_ConstraintCount + }; + + return applyConstraints.Schedule(inputDeps); + } + + [BurstCompile] + public struct StitchConstraintsBatchJob : IJob + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] public NativeArray stiffnesses; + public NativeArray lambdas; + + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray invMasses; + + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray counts; + + [ReadOnly] public float deltaTimeSqr; + [ReadOnly] public int activeConstraintCount; + + public void Execute() + { + for (int i = 0; i < activeConstraintCount; ++i) + { + 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] / deltaTimeSqr; + + // calculate position and lambda deltas: + float4 distance = positions[p1] - positions[p2]; + float constraint = math.length(distance); + + // calculate lambda and position deltas: + float dlambda = (-constraint - compliance * lambdas[i]) / (w1 + w2 + compliance + BurstMath.epsilon); + float4 delta = dlambda * distance / (constraint + BurstMath.epsilon); + + lambdas[i] += dlambda; + + deltas[p1] += delta * w1; + deltas[p2] -= delta * w2; + + counts[p1]++; + counts[p2]++; + } + } + } + + [BurstCompile] + public struct ApplyStitchConstraintsBatchJob : IJob + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] public float sorFactor; + + [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 p1 = particleIndices[i * 2]; + int p2 = particleIndices[i * 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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraintsBatch.cs.meta new file mode 100644 index 00000000..fbecad96 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cfc801159b76b4cc1a2a7593113d6935 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear.meta new file mode 100644 index 00000000..06639848 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 67eda103405cc476bbd356a301fdc499 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraints.cs new file mode 100644 index 00000000..be5283ec --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraints.cs @@ -0,0 +1,26 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; + +namespace Obi +{ + public class BurstStretchShearConstraints : BurstConstraintsImpl + { + public BurstStretchShearConstraints(BurstSolverImpl solver) : base(solver, Oni.ConstraintType.StretchShear) + { + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new BurstStretchShearConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as BurstStretchShearConstraintsBatch); + batch.Destroy(); + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraints.cs.meta new file mode 100644 index 00000000..8e0f8f77 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a79c4e863802e4ca19939ab6766329e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraintsBatch.cs new file mode 100644 index 00000000..006153e1 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraintsBatch.cs @@ -0,0 +1,206 @@ +#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 +{ + public class BurstStretchShearConstraintsBatch : BurstConstraintsBatchImpl, IStretchShearConstraintsBatchImpl + { + private NativeArray orientationIndices; + private NativeArray restLengths; + private NativeArray restOrientations; + private NativeArray stiffnesses; + + public BurstStretchShearConstraintsBatch(BurstStretchShearConstraints 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.AsNativeArray(); + this.orientationIndices = orientationIndices.AsNativeArray(); + this.restLengths = restLengths.AsNativeArray(); + this.restOrientations = restOrientations.AsNativeArray(); + this.stiffnesses = stiffnesses.AsNativeArray(); + this.lambdas = lambdas.AsNativeArray(); + m_ConstraintCount = count; + } + + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) + { + var projectConstraints = new StretchShearConstraintsBatchJob() + { + particleIndices = particleIndices, + orientationIndices = orientationIndices, + restLengths = restLengths, + restOrientations = restOrientations, + stiffnesses = stiffnesses, + lambdas = lambdas.Reinterpret(), + + positions = solverImplementation.positions, + orientations = solverImplementation.orientations, + invMasses = solverImplementation.invMasses, + invRotationalMasses = solverImplementation.invRotationalMasses, + + deltas = solverImplementation.positionDeltas, + orientationDeltas = solverImplementation.orientationDeltas, + counts = solverImplementation.positionConstraintCounts, + orientationCounts = solverImplementation.orientationConstraintCounts, + + deltaTimeSqr = substepTime * substepTime + }; + + return projectConstraints.Schedule(m_ConstraintCount, 32, inputDeps); + } + + public override JobHandle Apply(JobHandle inputDeps, float substepTime) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var applyConstraints = new ApplyStretchShearConstraintsBatchJob() + { + particleIndices = particleIndices, + orientationIndices = orientationIndices, + + positions = solverImplementation.positions, + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + + orientations = solverImplementation.orientations, + orientationDeltas = solverImplementation.orientationDeltas, + orientationCounts = solverImplementation.orientationConstraintCounts, + + sorFactor = parameters.SORFactor + }; + + return applyConstraints.Schedule(m_ConstraintCount, 64, inputDeps); + } + + [BurstCompile] + public struct StretchShearConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] public NativeArray orientationIndices; + [ReadOnly] public NativeArray restLengths; + [ReadOnly] public NativeArray restOrientations; + [ReadOnly] public NativeArray stiffnesses; + public NativeArray lambdas; + + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray orientations; + [ReadOnly] public NativeArray invMasses; + [ReadOnly] public NativeArray invRotationalMasses; + + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray orientationDeltas; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray counts; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray orientationCounts; + + [ReadOnly] public float deltaTimeSqr; + + public void Execute(int i) + { + 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] / deltaTimeSqr; + + float3 e = math.rotate(restOrientations[i],new float3(0, 0, 1)); + quaternion basis = math.mul(orientations[q],restOrientations[i]); + + // calculate rod vector in local element space: + float3 gamma = math.rotate(math.conjugate(basis), (positions[p2] - positions[p1]).xyz) / (restLengths[i] + BurstMath.epsilon); + + // 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]); + float3 dlambda = (gamma - compliances * lambdas[i]) / (W + compliances + BurstMath.epsilon); + lambdas[i] += dlambda; + + // convert lambda delta lambda back to world space: + dlambda = math.mul(basis, dlambda); + + deltas[p1] += new float4(dlambda, 0) * w1; + deltas[p2] -= new float4(dlambda, 0) * w2; + + quaternion e_3 = new quaternion(e.x,e.y,e.z,0); + quaternion q_e_3_bar = math.mul(orientations[q],math.conjugate(e_3)); + + // 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]; + + quaternion orDelta = orientationDeltas[q]; + orDelta.value += rotDelta.value; + orientationDeltas[q] = orDelta; + + counts[p1]++; + counts[p2]++; + orientationCounts[q]++; + + } + } + + [BurstCompile] + public struct ApplyStretchShearConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] public NativeArray orientationIndices; + [ReadOnly] public float sorFactor; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray positions; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray counts; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray orientations; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray orientationDeltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray orientationCounts; + + public void Execute(int i) + { + int p1 = particleIndices[i * 2]; + int p2 = particleIndices[i * 2 + 1]; + int q1 = orientationIndices[i]; + + 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; + } + + if (orientationCounts[q1] > 0) + { + quaternion q = orientations[q1]; + q.value += orientationDeltas[q1].value * sorFactor / orientationCounts[q1]; + orientations[q1] = math.normalize(q); + + orientationDeltas[q1] = new quaternion(0, 0, 0, 0); + orientationCounts[q1] = 0; + } + + } + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraintsBatch.cs.meta new file mode 100644 index 00000000..fd4594af --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f505342239d5443fbd06fb4e610b240 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether.meta new file mode 100644 index 00000000..edc51075 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c77d80d2f6a7b4136bfdc684b23b91f3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraints.cs new file mode 100644 index 00000000..ad12a2d4 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraints.cs @@ -0,0 +1,26 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; + +namespace Obi +{ + public class BurstTetherConstraints : BurstConstraintsImpl + { + public BurstTetherConstraints(BurstSolverImpl solver) : base(solver, Oni.ConstraintType.Distance) + { + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new BurstTetherConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as BurstTetherConstraintsBatch); + batch.Destroy(); + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraints.cs.meta new file mode 100644 index 00000000..0a7fa83a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c12658b3bc614f3c921a54dc2489881 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraintsBatch.cs new file mode 100644 index 00000000..eb1a4ee2 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraintsBatch.cs @@ -0,0 +1,141 @@ +#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 +{ + public class BurstTetherConstraintsBatch : BurstConstraintsBatchImpl, ITetherConstraintsBatchImpl + { + private NativeArray maxLengthScale; + private NativeArray stiffnesses; + + public BurstTetherConstraintsBatch(BurstTetherConstraints 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.AsNativeArray(); + this.maxLengthScale = maxLengthScale.AsNativeArray(); + this.stiffnesses = stiffnesses.AsNativeArray(); + this.lambdas = lambdas.AsNativeArray(); + m_ConstraintCount = count; + } + + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) + { + var projectConstraints = new TetherConstraintsBatchJob() + { + particleIndices = particleIndices, + maxLengthScale = maxLengthScale, + stiffnesses = stiffnesses, + lambdas = lambdas, + positions = solverImplementation.positions, + invMasses = solverImplementation.invMasses, + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + deltaTimeSqr = substepTime * substepTime + }; + + return projectConstraints.Schedule(m_ConstraintCount, 32, inputDeps); + } + + public override JobHandle Apply(JobHandle inputDeps, float substepTime) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var applyConstraints = new ApplyTetherConstraintsBatchJob() + { + particleIndices = particleIndices, + + positions = solverImplementation.positions, + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + + sorFactor = parameters.SORFactor + }; + + return applyConstraints.Schedule(m_ConstraintCount, 64, inputDeps); + } + + [BurstCompile] + public struct TetherConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeArray particleIndices; + [ReadOnly] public NativeArray maxLengthScale; + [ReadOnly] public NativeArray stiffnesses; + public NativeArray lambdas; + + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray invMasses; + + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray counts; + + [ReadOnly] public float deltaTimeSqr; + + public void Execute(int i) + { + 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] / deltaTimeSqr; + + // calculate position and lambda deltas: + float4 distance = positions[p1] - positions[p2]; + float d = math.length(distance); + + // 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 + BurstMath.epsilon); + float4 delta = dlambda * distance / (d + BurstMath.epsilon); + lambdas[i] += dlambda; + deltas[p1] += delta * w1; + counts[p1]++; + } + } + } + + [BurstCompile] + public struct ApplyTetherConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeSlice particleIndices; + + // linear/position properties: + [NativeDisableParallelForRestriction] public NativeArray positions; + [NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableParallelForRestriction] public NativeArray counts; + + [ReadOnly] public float sorFactor; + + public void Execute(int index) + { + // only the first particle out of each pair is affected: + int i = particleIndices[index * 2]; + + if (counts[i] > 0) + { + positions[i] += deltas[i] * sorFactor / counts[i]; + deltas[i] = float4.zero; + counts[i] = 0; + } + } + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraintsBatch.cs.meta new file mode 100644 index 00000000..ef9db3d3 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0333dee6dab0c40a9abc35796d0fd99a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume.meta new file mode 100644 index 00000000..40b34b22 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0b17a4f4853654722be7ce3458a4ce7a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraints.cs new file mode 100644 index 00000000..aae0fa86 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraints.cs @@ -0,0 +1,26 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; + +namespace Obi +{ + public class BurstVolumeConstraints : BurstConstraintsImpl + { + public BurstVolumeConstraints(BurstSolverImpl solver) : base(solver, Oni.ConstraintType.Volume) + { + } + + public override IConstraintsBatchImpl CreateConstraintsBatch() + { + var dataBatch = new BurstVolumeConstraintsBatch(this); + batches.Add(dataBatch); + return dataBatch; + } + + public override void RemoveBatch(IConstraintsBatchImpl batch) + { + batches.Remove(batch as BurstVolumeConstraintsBatch); + batch.Destroy(); + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraints.cs.meta new file mode 100644 index 00000000..9aceba9b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 54b3de3345cef43db9f6b37df8cafabb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraintsBatch.cs new file mode 100644 index 00000000..f813744d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraintsBatch.cs @@ -0,0 +1,232 @@ +#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 +{ + public class BurstVolumeConstraintsBatch : BurstConstraintsBatchImpl, IVolumeConstraintsBatchImpl + { + private NativeArray firstTriangle; + private NativeArray numTriangles; + private NativeArray restVolumes; + private NativeArray pressureStiffness; + + public BurstVolumeConstraintsBatch(BurstVolumeConstraints 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) + { + this.particleIndices = triangles.AsNativeArray(); + this.firstTriangle = firstTriangle.AsNativeArray(); + this.numTriangles = numTriangles.AsNativeArray(); + this.restVolumes = restVolumes.AsNativeArray(); + this.pressureStiffness = pressureStiffness.AsNativeArray(); + this.lambdas = lambdas.AsNativeArray(); + m_ConstraintCount = count; + } + + + public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) + { + var projectConstraints = new VolumeConstraintsBatchJob() + { + triangles = particleIndices, + firstTriangle = firstTriangle, + numTriangles = numTriangles, + restVolumes = restVolumes, + pressureStiffness = pressureStiffness, + lambdas = lambdas, + + positions = solverImplementation.positions, + invMasses = solverImplementation.invMasses, + + gradients = solverImplementation.fluidData, // reuse fluidData for temp gradients. + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + + deltaTimeSqr = substepTime * substepTime + }; + + return projectConstraints.Schedule(m_ConstraintCount, 4, inputDeps); + } + + public override JobHandle Apply(JobHandle inputDeps, float substepTime) + { + var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); + + var applyConstraints = new ApplyVolumeConstraintsBatchJob() + { + triangles = particleIndices, + firstTriangle = firstTriangle, + numTriangles = numTriangles, + positions = solverImplementation.positions, + deltas = solverImplementation.positionDeltas, + counts = solverImplementation.positionConstraintCounts, + + sorFactor = parameters.SORFactor + }; + + return applyConstraints.Schedule(m_ConstraintCount, 8, inputDeps); + } + + [BurstCompile] + public struct VolumeConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeArray triangles; + [ReadOnly] public NativeArray firstTriangle; + [ReadOnly] public NativeArray numTriangles; + [ReadOnly] public NativeArray restVolumes; + [ReadOnly] public NativeArray pressureStiffness; + public NativeArray lambdas; + + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray invMasses; + + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray gradients; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray counts; + + [ReadOnly] public float deltaTimeSqr; + + public void Execute(int i) + { + float compliance = pressureStiffness[i].y / deltaTimeSqr; + + // calculate volume: + for (int j = 0; j < numTriangles[i]; ++j) + { + int v = (firstTriangle[i] + j) * 3; + int i1 = triangles[v]; + int i2 = triangles[v + 1]; + int i3 = triangles[v + 2]; + + gradients[i1] = new float4(0, 0, 0, 1); + gradients[i2] = new float4(0, 0, 0, 1); + gradients[i3] = new float4(0, 0, 0, 1); + } + + float volume = 0; + for (int j = 0; j < numTriangles[i]; ++j) + { + int v = (firstTriangle[i] + j) * 3; + int i1 = triangles[v]; + int i2 = triangles[v + 1]; + int i3 = triangles[v + 2]; + + //accumulate gradient for each particle: + 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 < numTriangles[i]; ++j) + { + 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 + float constraint = volume - pressureStiffness[i].x * restVolumes[i]; + + // calculate lagrange multiplier delta: + float dlambda = (-constraint - compliance * lambdas[i]) / (denominator + compliance + BurstMath.epsilon); + lambdas[i] += dlambda; + + // calculate position deltas: + for (int j = 0; j < numTriangles[i]; ++j) + { + 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]++; + } + } + } + + [BurstCompile] + public struct ApplyVolumeConstraintsBatchJob : IJobParallelFor + { + [ReadOnly] public NativeArray triangles; + [ReadOnly] public NativeArray firstTriangle; + [ReadOnly] public NativeArray numTriangles; + [ReadOnly] public float sorFactor; + + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray positions; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray deltas; + [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray counts; + + public void Execute(int i) + { + + 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]; + + 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; + } + + if (counts[p3] > 0) + { + positions[p3] += deltas[p3] * sorFactor / counts[p3]; + deltas[p3] = float4.zero; + counts[p3] = 0; + } + } + } + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraintsBatch.cs.meta new file mode 100644 index 00000000..cff4f91b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7074d2203034e432a8b88a3b3018283a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures.meta new file mode 100644 index 00000000..0c37e043 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7d7a8ea58f9a3403e9147d6d8874db86 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAabb.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAabb.cs new file mode 100644 index 00000000..5fea22d3 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAabb.cs @@ -0,0 +1,156 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Mathematics; + +namespace Obi +{ + public struct BurstAabb + { + public float4 min; + public float4 max; + + public float4 size + { + get { return max - min; } + } + + public float4 center + { + get { return min + (max - min) * 0.5f; } + } + + public BurstAabb(float4 min, float4 max) + { + this.min = min; + this.max = max; + } + + public BurstAabb(float4 v1, float4 v2, float4 v3, float4 margin) + { + min = math.min(math.min(v1, v2), v3) - margin; + max = math.max(math.max(v1, v2), v3) + margin; + } + + public BurstAabb(float4 v1, float4 v2, float4 margin) + { + min = math.min(v1, v2) - margin; + max = math.max(v1, v2) + margin; + } + + public BurstAabb(float4 previousPosition, float4 position, float radius) + { + min = math.min(position - radius, previousPosition - radius); + max = math.max(position + radius, previousPosition + radius); + } + + public float AverageAxisLength() + { + float4 d = max - min; + return (d.x + d.y + d.z) * 0.33f; + } + + public float MaxAxisLength() + { + return math.cmax((max - min).xyz); + } + + public void EncapsulateParticle(float4 position, float radius) + { + min = math.min(min, position - radius); + max = math.max(max, position + radius); + } + + public void EncapsulateParticle(float4 previousPosition, float4 position, float radius) + { + min = math.min(math.min(min, position - radius), previousPosition - radius); + max = math.max(math.max(max, position + radius), previousPosition + radius); + } + + public void EncapsulateBounds(in BurstAabb bounds) + { + min = math.min(min,bounds.min); + max = math.max(max,bounds.max); + } + + public void Expand(float4 amount) + { + min -= amount; + max += amount; + } + + public void Sweep(float4 velocity) + { + min = math.min(min, min + velocity); + max = math.max(max, max + velocity); + } + + public void Transform(in BurstAffineTransform transform) + { + Transform(float4x4.TRS(transform.translation.xyz, transform.rotation, transform.scale.xyz)); + } + + public void Transform(in float4x4 transform) + { + float3 xa = transform.c0.xyz * min.x; + float3 xb = transform.c0.xyz * max.x; + + float3 ya = transform.c1.xyz * min.y; + float3 yb = transform.c1.xyz * max.y; + + float3 za = transform.c2.xyz * min.z; + float3 zb = transform.c2.xyz * max.z; + + min = new float4(math.min(xa, xb) + math.min(ya, yb) + math.min(za, zb) + transform.c3.xyz, 0); + max = new float4(math.max(xa, xb) + math.max(ya, yb) + math.max(za, zb) + transform.c3.xyz, 0); + } + + public BurstAabb Transformed(in BurstAffineTransform transform) + { + var cpy = this; + cpy.Transform(transform); + return cpy; + } + + public BurstAabb Transformed(in float4x4 transform) + { + var cpy = this; + cpy.Transform(transform); + return cpy; + } + + public bool IntersectsAabb(in BurstAabb bounds, bool in2D = false) + { + if (in2D) + return (min[0] <= bounds.max[0] && max[0] >= bounds.min[0]) && + (min[1] <= bounds.max[1] && max[1] >= bounds.min[1]); + + return (min[0] <= bounds.max[0] && max[0] >= bounds.min[0]) && + (min[1] <= bounds.max[1] && max[1] >= bounds.min[1]) && + (min[2] <= bounds.max[2] && max[2] >= bounds.min[2]); + } + + public bool IntersectsRay(float4 origin, float4 inv_dir, bool in2D = false) + { + float4 t1 = (min - origin) * inv_dir; + float4 t2 = (max - origin) * inv_dir; + + float4 tmin1 = math.min(t1,t2); + float4 tmax1 = math.max(t1,t2); + + float tmin, tmax; + + if (in2D) + { + tmin = math.cmax(tmin1.xy); + tmax = math.cmin(tmax1.xy); + } + else + { + tmin = math.cmax(tmin1.xyz); + tmax = math.cmin(tmax1.xyz); + } + + return tmax >= math.max(0, tmin) && tmin <= 1; + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAabb.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAabb.cs.meta new file mode 100644 index 00000000..e9a0ee4e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAabb.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2766a51cbde7a4fe490989456f737d23 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAffineTransform.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAffineTransform.cs new file mode 100644 index 00000000..f601191d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAffineTransform.cs @@ -0,0 +1,95 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using UnityEngine; +using Unity.Mathematics; +using System.Collections; + +namespace Obi +{ + public struct BurstAffineTransform + { + public float4 translation; + public float4 scale; + public quaternion rotation; + + public BurstAffineTransform(float4 translation, quaternion rotation, float4 scale) + { + // make sure there are good values in the 4th component: + translation[3] = 0; + scale[3] = 1; + + this.translation = translation; + this.rotation = rotation; + this.scale = scale; + } + + public static BurstAffineTransform operator *(BurstAffineTransform a, BurstAffineTransform b) + { + return new BurstAffineTransform(a.TransformPoint(b.translation), + math.mul(a.rotation,b.rotation), + a.scale * b.scale); + } + + public BurstAffineTransform Inverse() + { + return new BurstAffineTransform(new float4(math.rotate(math.conjugate(rotation),(translation / -scale).xyz),0), + math.conjugate(rotation), + 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), + math.slerp(rotation, other.rotation, rotationalMu), + math.lerp(scale, other.scale, scaleMu)); + } + + public float4 TransformPoint(float4 point) + { + return new float4(translation.xyz + math.rotate(rotation, (point * scale).xyz),0); + } + + public float4 InverseTransformPoint(float4 point) + { + return new float4(math.rotate(math.conjugate(rotation),(point - translation).xyz) / scale.xyz , 0); + } + + public float4 TransformPointUnscaled(float4 point) + { + return new float4(translation.xyz + math.rotate(rotation,point.xyz), 0); + } + + public float4 InverseTransformPointUnscaled(float4 point) + { + return new float4(math.rotate(math.conjugate(rotation), (point - translation).xyz), 0); + } + + + public float4 TransformDirection(float4 direction) + { + return new float4(math.rotate(rotation, direction.xyz), 0); + } + + public float4 InverseTransformDirection(float4 direction) + { + return new float4(math.rotate(math.conjugate(rotation), direction.xyz), 0); + } + + public float4 TransformVector(float4 vector) + { + return new float4(math.rotate(rotation, (vector * scale).xyz), 0); + } + + public float4 InverseTransformVector(float4 vector) + { + return new float4(math.rotate(math.conjugate(rotation),vector.xyz) / scale.xyz, 0); + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAffineTransform.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAffineTransform.cs.meta new file mode 100644 index 00000000..f5c311f1 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAffineTransform.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 42d935e53ff25405bb572c630431a08e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCellSpan.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCellSpan.cs new file mode 100644 index 00000000..beadf100 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCellSpan.cs @@ -0,0 +1,60 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using UnityEngine; +using Unity.Mathematics; +using System.Collections; +using System; + +namespace Obi +{ + public struct BurstCellSpan : IEquatable + { + public int4 min; + public int4 max; + + + public BurstCellSpan(CellSpan span) + { + this.min = new int4(span.min.x, span.min.y, span.min.z, span.min.w); + this.max = new int4(span.max.x, span.max.y, span.max.z, span.max.w); + } + + public BurstCellSpan(int4 min, int4 max) + { + this.min = min; + this.max = max; + } + + public int level + { + get{return min.w;} + } + + public bool Equals(BurstCellSpan other) + { + return min.Equals(other.min) && max.Equals(other.max); + } + + public override bool Equals(object obj) + { + return this.Equals((BurstCellSpan)obj); + } + + public override int GetHashCode() + { + return 0; // we don't have any non-mutable fields, so just return 0. + } + + public static bool operator ==(BurstCellSpan a, BurstCellSpan b) + { + return a.Equals(b); + } + + public static bool operator !=(BurstCellSpan a, BurstCellSpan b) + { + return !a.Equals(b); + } + + + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCellSpan.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCellSpan.cs.meta new file mode 100644 index 00000000..a574d71c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCellSpan.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9612a967e340a428ba9353b922a881be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCollisionMaterial.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCollisionMaterial.cs new file mode 100644 index 00000000..a9336813 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCollisionMaterial.cs @@ -0,0 +1,78 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using UnityEngine; +using Unity.Mathematics; +using System.Collections; +using System; + +namespace Obi +{ + public struct BurstCollisionMaterial // TODO: use CollisionMaterial directly. + { + public float dynamicFriction; + public float staticFriction; + public float rollingFriction; + public float stickiness; + public float stickDistance; + public Oni.MaterialCombineMode frictionCombine; + public Oni.MaterialCombineMode stickinessCombine; + public int rollingContacts; + + public static BurstCollisionMaterial CombineWith(BurstCollisionMaterial a, BurstCollisionMaterial b) + { + BurstCollisionMaterial result = new BurstCollisionMaterial(); + var frictionCombineMode = (Oni.MaterialCombineMode)math.max((int)a.frictionCombine, (int)b.frictionCombine); + var stickCombineMode = (Oni.MaterialCombineMode)math.max((int)a.stickinessCombine, (int)b.stickinessCombine); + + switch (frictionCombineMode) + { + 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; + break; + + case Oni.MaterialCombineMode.Minimum: + result.dynamicFriction = math.min(a.dynamicFriction, b.dynamicFriction); + result.staticFriction = math.min(a.staticFriction, b.staticFriction); + result.rollingFriction = math.min(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) + { + default: // average + result.stickiness = (a.stickiness + b.stickiness) * 0.5f; + break; + + case Oni.MaterialCombineMode.Minimum: + result.stickiness = math.min(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); + result.rollingContacts = a.rollingContacts | b.rollingContacts; + return result; + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCollisionMaterial.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCollisionMaterial.cs.meta new file mode 100644 index 00000000..0adfc955 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCollisionMaterial.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de388c94a975a489a8093d110d42af2a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstInertialFrame.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstInertialFrame.cs new file mode 100644 index 00000000..a49d7d56 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstInertialFrame.cs @@ -0,0 +1,60 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using UnityEngine; +using Unity.Mathematics; +using System.Collections; + +namespace Obi +{ + public struct BurstInertialFrame + { + public BurstAffineTransform frame; + public BurstAffineTransform prevFrame; + + public float4 velocity; + public float4 angularVelocity; + + public float4 acceleration; + public float4 angularAcceleration; + + public BurstInertialFrame(float4 position, float4 scale, quaternion rotation) + { + this.frame = new BurstAffineTransform(position, rotation, scale); + this.prevFrame = frame; + + velocity = float4.zero; + angularVelocity = float4.zero; + acceleration = float4.zero; + angularAcceleration = float4.zero; + } + + public BurstInertialFrame(BurstAffineTransform frame) + { + this.frame = frame; + this.prevFrame = frame; + + velocity = float4.zero; + angularVelocity = float4.zero; + acceleration = float4.zero; + angularAcceleration = float4.zero; + } + + public void Update(float4 position, float4 scale, quaternion rotation, float dt) + { + prevFrame = frame; + float4 prevVelocity = velocity; + float4 prevAngularVelocity = angularVelocity; + + frame.translation = position; + frame.rotation = rotation; + frame.scale = scale; + + velocity = BurstIntegration.DifferentiateLinear(frame.translation, prevFrame.translation, dt); + angularVelocity = BurstIntegration.DifferentiateAngular(frame.rotation, prevFrame.rotation, dt); + + acceleration = BurstIntegration.DifferentiateLinear(velocity, prevVelocity, dt); + angularAcceleration = BurstIntegration.DifferentiateLinear(angularVelocity, prevAngularVelocity, dt); + } + + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstInertialFrame.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstInertialFrame.cs.meta new file mode 100644 index 00000000..f48cd9ee --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstInertialFrame.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e3c3b9a94006d4984a94f040e6d2c737 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstPrefixSum.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstPrefixSum.cs new file mode 100644 index 00000000..c214ce9e --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstPrefixSum.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstPrefixSum.cs.meta new file mode 100644 index 00000000..3cd7558f --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstQueryShape.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstQueryShape.cs new file mode 100644 index 00000000..b5688031 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstQueryShape.cs @@ -0,0 +1,16 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Mathematics; + +namespace Obi +{ + public struct BurstQueryShape + { + public float4 center; + public float4 size; + public QueryShape.QueryType type; + public float contactOffset; + public float maxDistance; + public int filter; + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstQueryShape.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstQueryShape.cs.meta new file mode 100644 index 00000000..538a4ca1 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstQueryShape.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1407a04be79f44be6a770255e8e89195 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstRigidbody.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstRigidbody.cs new file mode 100644 index 00000000..7df6296a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstRigidbody.cs @@ -0,0 +1,23 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; +using UnityEngine; +using Unity.Collections; +using Unity.Mathematics; + +namespace Obi +{ + + public struct BurstRigidbody + { + public float4x4 inverseInertiaTensor; + public float4 velocity; + public float4 angularVelocity; + public float4 com; + public float inverseMass; + + public int constraintCount; + private int pad1; + private int pad2; + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstRigidbody.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstRigidbody.cs.meta new file mode 100644 index 00000000..9487b186 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstRigidbody.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f72992ee9e3174e89b3c0e5b6da57a17 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher.meta new file mode 100644 index 00000000..528067dd --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 20b822fd4fe494009afa17025c273ec8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/BatchLUT.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/BatchLUT.cs new file mode 100644 index 00000000..509d7fe8 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/BatchLUT.cs @@ -0,0 +1,49 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; +using UnityEngine; +using Unity.Collections; + +namespace Obi +{ + public struct BatchLUT : IDisposable + { + public readonly int numBatches; + public readonly NativeArray batchIndex; + + public BatchLUT(int numBatches) + { + this.numBatches = numBatches; + + batchIndex = new NativeArray(UInt16.MaxValue + 1, Allocator.Persistent, NativeArrayOptions.ClearMemory); + const ushort end = UInt16.MaxValue; + ushort numBits = (ushort)(numBatches - 1); + + // For each entry in the table, compute the position of the first '0' bit in the index, starting from the less significant bit. + // This is the index of the first batch where we can add the constraint to. + + for (ushort value = 0; value < end; value++) + { + ushort valueCopy = value; + for (ushort i = 0; i < numBits; i++) + { + if ((valueCopy & 1) == 0) + { + batchIndex[value] = i; + break; + } + valueCopy >>= 1; + } + + } + + batchIndex[end] = numBits; + } + + public void Dispose() + { + batchIndex.Dispose(); + } + } + +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/BatchLUT.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/BatchLUT.cs.meta new file mode 100644 index 00000000..60a9f235 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/BatchLUT.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0ba613bda78be4a71be94b90f92fbde5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintBatcher.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintBatcher.cs new file mode 100644 index 00000000..5f2c182b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintBatcher.cs @@ -0,0 +1,216 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; +using Unity.Collections; +using Unity.Mathematics; +using Unity.Burst; +using Unity.Jobs; + +namespace Obi +{ + + public struct BatchData + { + public ushort batchID; // Batch identifier. All bits will be '0', except for the one at the position of the batch. + + public int startIndex; // first constraint in the batch + public int constraintCount; // amount of constraints in the batch. + public int activeConstraintCount; // auxiliar counter used to sort the constraints in linear time. + + public int workItemSize; // size of each work item. + public int workItemCount; // number of work items. + public bool isLast; + + public BatchData(int index, int maxBatches) + { + batchID = (ushort)(1 << index); + isLast = index == (maxBatches - 1); + constraintCount = 0; + activeConstraintCount = 0; + + startIndex = 0; + workItemSize = 0; + workItemCount = 0; + } + + public void GetConstraintRange(int workItemIndex, out int start, out int end) + { + start = startIndex + workItemSize * workItemIndex; + end = startIndex + math.min(constraintCount, workItemSize * (workItemIndex + 1)); + } + + } + + public unsafe struct WorkItem + { + public const int minWorkItemSize = 64; + public fixed int constraints[minWorkItemSize]; + public int constraintCount; + + public bool Add(int constraintIndex) + { + // add the constraint to this work item. + fixed (int* constraintIndices = constraints) + { + constraintIndices[constraintCount] = constraintIndex; + } + + // if we've completed the work item, close it and reuse for the next one. + return (++constraintCount == minWorkItemSize); + } + } + + public struct ConstraintBatcher : IDisposable where T : struct, IConstraintProvider + { + public int maxBatches; + private BatchLUT batchLUT; // look up table for batch indices. + + public ConstraintBatcher(int maxBatches) + { + this.maxBatches = math.min(17, maxBatches); + batchLUT = new BatchLUT(this.maxBatches); + } + + public void Dispose() + { + batchLUT.Dispose(); + } + + /** + * Linear-time graph coloring using bitmasks and a look-up table. Used to organize contacts into batches for parallel processing. + * input: array of unsorted constraints. + * output: + * - sorted constraint indices array. + * - array of batchData, one per batch: startIndex, batchSize, workItemSize (at most == batchSize), numWorkItems + * - number of active batches. + */ + + public JobHandle BatchConstraints(ref T constraintDesc, + int particleCount, + ref NativeArray batchData, + ref NativeArray activeBatchCount, + JobHandle inputDeps) + { + if (activeBatchCount.Length != 1) + return inputDeps; + + var batchJob = new BatchContactsJob + { + batchMasks = new NativeArray(particleCount, Allocator.TempJob, NativeArrayOptions.ClearMemory), + batchIndices = new NativeArray(constraintDesc.GetConstraintCount(), Allocator.TempJob, NativeArrayOptions.ClearMemory), + lut = batchLUT, + constraintDesc = constraintDesc, + batchData = batchData, + activeBatchCount = activeBatchCount, + maxBatches = maxBatches + }; + + return batchJob.Schedule(inputDeps); + } + + [BurstCompile] + private struct BatchContactsJob : IJob + { + [DeallocateOnJobCompletion] + public NativeArray batchMasks; + + [DeallocateOnJobCompletion] + public NativeArray batchIndices; + + [ReadOnly] public BatchLUT lut; + public T constraintDesc; + public NativeArray batchData; + public NativeArray activeBatchCount; + + public int maxBatches; + + public unsafe void Execute() + { + // Initialize batch data array + for (int i = 0; i < batchData.Length; ++i) + batchData[i] = new BatchData(i, maxBatches); + + // temporary array containing an open work item for each batch. + WorkItem* workItems = stackalloc WorkItem[maxBatches]; + for (int i = 0; i < maxBatches; i++) + workItems[i] = new WorkItem(); + + int constraintCount = constraintDesc.GetConstraintCount(); + + // find a batch for each constraint: + for (int i = 0; i < constraintCount; ++i) + { + // OR together the batch masks of all entities involved in the constraint: + int batchMask = 0; + for (int k = 0; k < constraintDesc.GetParticleCount(i); ++k) + batchMask |= batchMasks[constraintDesc.GetParticle(i, k)]; + + // look up the first free batch index for this constraint: + int batchIndex = batchIndices[i] = lut.batchIndex[batchMask]; + + // update the amount of constraints in the batch: + var batch = batchData[batchIndex]; + batch.constraintCount++; + batchData[batchIndex] = batch; + + // add the constraint to the last work item of the batch: + if (workItems[batchIndex].Add(i)) + { + // if this work item does not belong to the last batch: + if (batchIndex != maxBatches - 1) + { + // tag all entities in the work item with the batch mask to close it. + // this way we know constraints referencing any of these entities can no longer be added to this batch. + for (int j = 0; j < workItems[batchIndex].constraintCount; j++) + { + int constraint = workItems[batchIndex].constraints[j]; + + for (int k = 0; k < constraintDesc.GetParticleCount(constraint); ++k) + batchMasks[constraintDesc.GetParticle(constraint, k)] |= batch.batchID; + } + } + + // reuse the work item. + workItems[batchIndex].constraintCount = 0; + } + + } + + // fill batch data: + activeBatchCount[0] = 0; + int numConstraints = 0; + for (int i = 0; i < batchData.Length; ++i) + { + var batch = batchData[i]; + + // bail out when we find the first empty batch: + if (batch.constraintCount == 0) + break; + + // calculate work item size, count, and index of the first constraint + batch.workItemSize = math.min(WorkItem.minWorkItemSize, batch.constraintCount); + batch.workItemCount = (batch.constraintCount + batch.workItemSize - 1) / batch.workItemSize; + batch.startIndex = numConstraints; + + numConstraints += batch.constraintCount; + activeBatchCount[0]++; + + batchData[i] = batch; + } + + // write out sorted constraint indices: + for (int i = 0; i < constraintCount; ++i) + { + var batch = batchData[batchIndices[i]]; + int sortedIndex = batch.startIndex + (batch.activeConstraintCount++); + constraintDesc.WriteSortedConstraint(i, sortedIndex); + batchData[batchIndices[i]] = batch; + } + + } + + + } + + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintBatcher.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintBatcher.cs.meta new file mode 100644 index 00000000..7b2143c6 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintBatcher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f15c420c952f4f689684489a7de8920 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintSorter.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintSorter.cs new file mode 100644 index 00000000..3b3bf9ee --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintSorter.cs @@ -0,0 +1,160 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; +using System.Collections.Generic; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Mathematics; +using Unity.Burst; +using Unity.Jobs; + +namespace Obi +{ + public class ConstraintSorter where T : unmanaged, IConstraint + { + + public struct ConstraintComparer : IComparer where K : IConstraint + { + // Compares by Height, Length, and Width. + public int Compare(K x, K y) + { + return x.GetParticle(1).CompareTo(y.GetParticle(1)); + } + } + + /** + * Performs a single-threaded count sort on the constraints array using the first particle index, + * then multiple parallel sorts over slices of the original array sorting by the second particle index. + */ + public JobHandle SortConstraints(int particleCount, + NativeArray constraints, + ref NativeArray sortedConstraints, + 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); + int numDigits = 0; + int maxBodyIndex = particleCount - 1; + { + int val = maxBodyIndex; + while (val > 0) + { + val >>= 1; + numDigits++; + } + } + + handle = new CountSortPerFirstParticleJob + { + input = constraints, + output = sortedConstraints, + maxDigits = numDigits, + maxIndex = maxBodyIndex, + digitCount = totalCountUpToDigit + }.Schedule(handle); + + // Sort sub arrays with default sort. + int numPerBatch = math.max(1, maxBodyIndex / 32); + + handle = new SortSubArraysJob + { + InOutArray = sortedConstraints, + NextElementIndex = totalCountUpToDigit, + comparer = new ConstraintComparer() + }.Schedule(totalCountUpToDigit.Length, numPerBatch, handle); + + return handle; + } + + [BurstCompile] + public struct CountSortPerFirstParticleJob : IJob + { + [ReadOnly][NativeDisableContainerSafetyRestriction] public NativeArray input; + public NativeArray output; + + [NativeDisableContainerSafetyRestriction] public NativeArray digitCount; + + public int maxDigits; + public int maxIndex; + + public void Execute() + { + // no real need for a mask, just in case bad particle indices were passed that have more digits than maxDigits. + int mask = (1 << maxDigits) - 1; + + // Count digits + for (int i = 0; i < input.Length; i++) + { + digitCount[input[i].GetParticle(0) & mask]++; + } + + // Calculate start index for each digit + int prev = digitCount[0]; + digitCount[0] = 0; + for (int i = 1; i <= maxIndex; i++) + { + int current = digitCount[i]; + digitCount[i] = digitCount[i - 1] + prev; + prev = current; + } + + // Copy elements into buckets based on particle index + for (int i = 0; i < input.Length; i++) + { + int index = digitCount[input[i].GetParticle(0) & mask]++; + if (index == 1 && input.Length == 1) + { + output[0] = input[0]; + } + output[index] = input[i]; + } + } + } + + // Sorts slices of an array in parallel + [BurstCompile] + public struct SortSubArraysJob : IJobParallelFor + { + [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; + + [ReadOnly] public ConstraintComparer comparer; + + public void Execute(int workItemIndex) + { + int startIndex = 0; + if (workItemIndex > 0) + { + startIndex = NextElementIndex[workItemIndex - 1]; + } + + if (startIndex < InOutArray.Length) + { + int length = NextElementIndex[workItemIndex] - startIndex; + DefaultSortOfSubArrays(InOutArray, startIndex, length, comparer); + } + } + + public static void DefaultSortOfSubArrays(NativeArray inOutArray, int startIndex, int length, ConstraintComparer comparer) + { + if (length > 2) + { + var slice = inOutArray.Slice(startIndex, length); + slice.Sort(comparer); + } + else if (length == 2) // just swap: + { + if (inOutArray[startIndex].GetParticle(1) > inOutArray[startIndex + 1].GetParticle(1)) + { + var temp = inOutArray[startIndex + 1]; + inOutArray[startIndex + 1] = inOutArray[startIndex]; + inOutArray[startIndex] = temp; + } + } + } + } + + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintSorter.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintSorter.cs.meta new file mode 100644 index 00000000..f96538a0 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintSorter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4cb7051d5b32442d79da18c47c1fbcc2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ContactProvider.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ContactProvider.cs new file mode 100644 index 00000000..011fecd0 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ContactProvider.cs @@ -0,0 +1,41 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Collections; + +namespace Obi +{ + public struct ContactProvider : IConstraintProvider + { + public NativeArray contacts; + public NativeArray sortedContacts; + public NativeArray simplices; + public SimplexCounts simplexCounts; + + public int GetConstraintCount() + { + return contacts.Length; + } + + public int GetParticleCount(int constraintIndex) + { + simplexCounts.GetSimplexStartAndSize(contacts[constraintIndex].bodyA, out int simplexSizeA); + simplexCounts.GetSimplexStartAndSize(contacts[constraintIndex].bodyB, out int simplexSizeB); + return simplexSizeA + simplexSizeB; + } + public int GetParticle(int constraintIndex, int index) + { + int simplexStartA = simplexCounts.GetSimplexStartAndSize(contacts[constraintIndex].bodyA, out int simplexSizeA); + int simplexStartB = simplexCounts.GetSimplexStartAndSize(contacts[constraintIndex].bodyB, out int simplexSizeB); + if (index < simplexSizeA) + return simplices[simplexStartA + index]; + else + return simplices[simplexStartB + index - simplexSizeA]; + } + + public void WriteSortedConstraint(int constraintIndex, int sortedIndex) + { + sortedContacts[sortedIndex] = contacts[constraintIndex]; + } + } + +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ContactProvider.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ContactProvider.cs.meta new file mode 100644 index 00000000..307657ae --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ContactProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fec3d78324058457cb723a60fb4858a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/FluidInteractionProvider.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/FluidInteractionProvider.cs new file mode 100644 index 00000000..f6bf87f5 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/FluidInteractionProvider.cs @@ -0,0 +1,32 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Collections; + +namespace Obi +{ + public struct FluidInteractionProvider : IConstraintProvider + { + public NativeArray interactions; + public NativeArray sortedInteractions; + + public int GetConstraintCount() + { + return interactions.Length; + } + + public int GetParticleCount(int constraintIndex) + { + return 2; + } + public int GetParticle(int constraintIndex, int index) + { + return interactions[constraintIndex].GetParticle(index); + } + + public void WriteSortedConstraint(int constraintIndex, int sortedIndex) + { + sortedInteractions[sortedIndex] = interactions[constraintIndex]; + } + } + +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/FluidInteractionProvider.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/FluidInteractionProvider.cs.meta new file mode 100644 index 00000000..1567c744 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/FluidInteractionProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 66b0d6e3db3c14b929541a23187c393b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraint.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraint.cs new file mode 100644 index 00000000..2015869b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraint.cs @@ -0,0 +1,10 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +namespace Obi +{ + public interface IConstraint + { + int GetParticleCount(); + int GetParticle(int index); + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraint.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraint.cs.meta new file mode 100644 index 00000000..7c631bab --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 49760f68f387c45b8b1e5482a6d0dabe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraintProvider.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraintProvider.cs new file mode 100644 index 00000000..44cf1860 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraintProvider.cs @@ -0,0 +1,12 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +namespace Obi +{ + public interface IConstraintProvider + { + int GetConstraintCount(); + int GetParticleCount(int constraintIndex); + int GetParticle(int constraintIndex, int index); + void WriteSortedConstraint(int constraintIndex, int sortedIndex); + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraintProvider.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraintProvider.cs.meta new file mode 100644 index 00000000..26f47840 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraintProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2f9cbc3295db8411ba4ac8c9a75291ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/FluidInteraction.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/FluidInteraction.cs new file mode 100644 index 00000000..f79ea05b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/FluidInteraction.cs @@ -0,0 +1,19 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; +using Unity.Mathematics; + +namespace Obi +{ + public struct FluidInteraction : IConstraint + { + public float4 gradient; + public float avgKernel; + public float avgGradient; + public int particleA; + public int particleB; + + public int GetParticleCount() { return 2; } + public int GetParticle(int index) { return index == 0 ? particleA : particleB; } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/FluidInteraction.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/FluidInteraction.cs.meta new file mode 100644 index 00000000..12b84018 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/FluidInteraction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 98e6b7036ee4a4806b75d155a753b769 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/GridHash.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/GridHash.cs new file mode 100644 index 00000000..fe57581a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/GridHash.cs @@ -0,0 +1,76 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Mathematics; + +namespace Obi +{ + public struct GridHash + { + public readonly static int3[] cellOffsets3D = + { + 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 int3 Quantize(float3 v, float cellSize) + { + return new int3(math.floor(v / cellSize)); + } + + public static int2 Quantize(float2 v, float cellSize) + { + return new int2(math.floor(v / cellSize)); + } + + 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; + } + + 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; + + /*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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/GridHash.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/GridHash.cs.meta new file mode 100644 index 00000000..8a077a2e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/GridHash.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 87666fac08214420abefb36a9166df43 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/NativeMultilevelGrid.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/NativeMultilevelGrid.cs new file mode 100644 index 00000000..aa210c06 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/NativeMultilevelGrid.cs @@ -0,0 +1,282 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Mathematics; +using System.Runtime.CompilerServices; + +namespace Obi +{ + + /** + * MultilevelGrid is the most used spatial partitioning structure in Obi. It is: + * + * - Unbounded: defines no limits on the size of location of space partitioned. + * - Sparse: only allocates memory where space has interesting features to track. + * - Multilevel: can store several levels of spatial subdivision, from very fine to very large. + * - Implicit: the hierarchical relationship between cells is not stored in memory, + * but implicitly derived from the structure itself. + * + * These characteristics make it extremely flexible, memory efficient, and fast. + * Its implementation is also fairly simple and concise. + */ + public unsafe struct NativeMultilevelGrid : IDisposable where T : unmanaged, IEquatable + { + + 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. + */ + public struct Cell where K : unmanaged, IEquatable + { + int4 coords; + UnsafeList contents; + + public Cell(int4 coords) + { + this.coords = coords; + contents = new UnsafeList(4,Allocator.Persistent); + } + + public int4 Coords + { + get { return coords; } + } + + public int Length + { + get { return contents.Length; } + } + + public void* ContentsPointer + { + get { return contents.Ptr; } + } + + public K this[int index] + { + get + { + return contents.ElementAt(index); + } + } + + public void Add(K entity) + { + contents.Add(entity); + } + + public bool Remove(K entity) + { + int index = contents.IndexOf(entity); + if (index >= 0) + { + contents.RemoveAtSwapBack(index); + return true; + } + return false; + } + + public void Dispose() + { + contents.Dispose(); + } + } + + public NativeParallelHashMap grid; + public NativeList> usedCells; + public NativeParallelHashMap populatedLevels; + + public NativeMultilevelGrid(int capacity, Allocator label) + { + grid = new NativeParallelHashMap(capacity, label); + usedCells = new NativeList>(label); + populatedLevels = new NativeParallelHashMap(10, label); + } + + public int CellCount + { + get { return usedCells.Length; } + } + + public void Clear() + { + for (int i = 0; i < usedCells.Length; ++i) + usedCells[i].Dispose(); + + grid.Clear(); + usedCells.Clear(); + populatedLevels.Clear(); + } + + public void Dispose() + { + for (int i = 0; i < usedCells.Length; ++i) + usedCells[i].Dispose(); + + grid.Dispose(); + usedCells.Dispose(); + populatedLevels.Dispose(); + } + + public int GetOrCreateCell(int4 cellCoords) + { + int cellIndex; + if (grid.TryGetValue(cellCoords, out cellIndex)) + { + return cellIndex; + } + else + { + grid.TryAdd(cellCoords, usedCells.Length); + usedCells.Add(new Cell(cellCoords)); + + IncreaseLevelPopulation(cellCoords.w); + + return usedCells.Length - 1; + } + } + + public bool TryGetCellIndex(int4 cellCoords, out int cellIndex) + { + return grid.TryGetValue(cellCoords, out cellIndex); + } + + public void RemoveEmpty() + { + // remove empty cells from the used cells list and the grid: + for (int i = usedCells.Length - 1; i >= 0 ; --i) + { + if (usedCells[i].Length == 0) + { + DecreaseLevelPopulation(usedCells[i].Coords.w); + grid.Remove(usedCells[i].Coords); + usedCells[i].Dispose(); + usedCells.RemoveAtSwapBack(i); + } + } + + // update grid indices: + for (int i = 0; i < usedCells.Length; ++i) + { + grid.Remove(usedCells[i].Coords); + grid.TryAdd(usedCells[i].Coords, i); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static 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 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 + minLevel); + } + + /** + * Given a cell coordinate, returns the coordinates of the cell containing it in a superior level. + */ + public static int4 GetParentCellCoords(int4 cellCoords, int level) + { + float decimation = math.exp2(level - cellCoords[3]); + int4 cell = (int4)math.floor((float4)cellCoords / decimation); + cell[3] = level; + return cell; + } + + public void RemoveFromCells(BurstCellSpan span, T content) + { + for (int x = span.min[0]; x <= span.max[0]; ++x) + for (int y = span.min[1]; y <= span.max[1]; ++y) + for (int z = span.min[2]; z <= span.max[2]; ++z) + { + int cellIndex; + if (TryGetCellIndex(new int4(x, y, z, span.level), out cellIndex)) + { + var oldCell = usedCells[cellIndex]; + oldCell.Remove(content); + usedCells[cellIndex] = oldCell; + } + } + } + + public void AddToCells(BurstCellSpan span, T content) + { + for (int x = span.min[0]; x <= span.max[0]; ++x) + for (int y = span.min[1]; y <= span.max[1]; ++y) + for (int z = span.min[2]; z <= span.max[2]; ++z) + { + int cellIndex = GetOrCreateCell(new int4(x, y, z, span.level)); + + var newCell = usedCells[cellIndex]; + newCell.Add(content); + usedCells[cellIndex] = newCell; + } + } + + public static void GetCellCoordsForBoundsAtLevel(NativeList coords, BurstAabb bounds, int level, int maxSize = 10) + { + coords.Clear(); + float cellSize = CellSizeOfLevel(level); + + int3 minCell = GridHash.Quantize(bounds.min.xyz, cellSize); + int3 maxCell = GridHash.Quantize(bounds.max.xyz, cellSize); + maxCell = minCell + math.min(maxCell - minCell, new int3(maxSize)); + + int3 size = maxCell - minCell + new int3(1); + + coords.Capacity = size.x * size.y * size.z; + + // TODO: return some sort of iterator trough the cells, not a native array. + 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) + { + coords.Add(new int4(x, y, z, level)); + } + } + } + } + + private void IncreaseLevelPopulation(int level) + { + + int population = 0; + if (populatedLevels.TryGetValue(level, out population)) + { + populatedLevels.Remove(level); + } + + populatedLevels.TryAdd(level, population + 1); + } + + private void DecreaseLevelPopulation(int level) + { + + int population = 0; + if (populatedLevels.TryGetValue(level, out population)) + { + population--; + populatedLevels.Remove(level); + + if (population > 0) + { + populatedLevels.TryAdd(level, population); + } + } + + } + } +} +#endif diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/NativeMultilevelGrid.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/NativeMultilevelGrid.cs.meta new file mode 100644 index 00000000..c1d78572 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/NativeMultilevelGrid.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2745cdd0ade4f4ac0a7ca952c1ad5dd8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ParticleGrid.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ParticleGrid.cs new file mode 100644 index 00000000..6e2d328d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ParticleGrid.cs @@ -0,0 +1,448 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using System; +using Unity.Collections; +using Unity.Jobs; +using Unity.Mathematics; +using Unity.Burst; + +namespace Obi +{ + public struct MovingEntity + { + public int4 oldCellCoord; + public int4 newCellCoord; + public int entity; + } + + public class ParticleGrid : IDisposable + { + public NativeMultilevelGrid grid; + public NativeQueue particleContactQueue; + public NativeQueue fluidInteractionQueue; + + [BurstCompile] + struct UpdateGrid : IJob + { + public NativeMultilevelGrid grid; + [ReadOnly] public NativeArray simplexBounds; + public NativeArray cellCoords; + + [ReadOnly] public Oni.SolverParameters parameters; + [ReadOnly] public int simplexCount; + + public void Execute() + { + grid.Clear(); + + 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]; + newCell.Add(i); + grid.usedCells[cellIndex] = newCell; + } + } + } + + [BurstCompile] + public struct GenerateParticleParticleContactsJob : IJobParallelFor + { + [ReadOnly] public NativeMultilevelGrid grid; + + [DeallocateOnJobCompletion] + [ReadOnly] public NativeArray gridLevels; + + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray orientations; + [ReadOnly] public NativeArray restPositions; + [ReadOnly] public NativeArray restOrientations; + [ReadOnly] public NativeArray velocities; + [ReadOnly] public NativeArray invMasses; + [ReadOnly] public NativeArray radii; + [ReadOnly] public NativeArray normals; + [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 particleMaterialIndices; + [ReadOnly] public NativeArray collisionMaterials; + + [WriteOnly] + [NativeDisableParallelForRestriction] + public NativeQueue.ParallelWriter contactsQueue; + + [WriteOnly] + [NativeDisableParallelForRestriction] + public NativeQueue.ParallelWriter fluidInteractionsQueue; + + [ReadOnly] public float dt; + [ReadOnly] public float collisionMargin; + [ReadOnly] public int optimizationIterations; + [ReadOnly] public float optimizationTolerance; + + public void Execute(int i) + { + BurstSimplex simplexShape = new BurstSimplex() + { + positions = restPositions, + radii = radii, + simplices = simplices, + }; + + // Looks for close particles in the same cell: + IntraCellSearch(i, ref simplexShape); + + // Looks for close particles in neighboring cells, in the same level or higher levels. + IntraLevelSearch(i, ref simplexShape); + } + + private void IntraCellSearch(int cellIndex, ref BurstSimplex simplexShape) + { + int cellLength = grid.usedCells[cellIndex].Length; + + for (int p = 0; p < cellLength; ++p) + { + for (int n = p + 1; n < cellLength; ++n) + { + InteractionTest(grid.usedCells[cellIndex][p], grid.usedCells[cellIndex][n], ref simplexShape); + } + } + } + + private void InterCellSearch(int cellIndex, int neighborCellIndex, ref BurstSimplex simplexShape) + { + int cellLength = grid.usedCells[cellIndex].Length; + int neighborCellLength = grid.usedCells[neighborCellIndex].Length; + + for (int p = 0; p < cellLength; ++p) + { + for (int n = 0; n < neighborCellLength; ++n) + { + InteractionTest(grid.usedCells[cellIndex][p], grid.usedCells[neighborCellIndex][n], ref simplexShape); + } + } + } + + private void IntraLevelSearch(int cellIndex, ref BurstSimplex simplexShape) + { + int4 cellCoords = grid.usedCells[cellIndex].Coords; + + // neighboring cells in the current level: + for (int i = 0; i < 13; ++i) + { + int4 neighborCellCoords = new int4(cellCoords.xyz + GridHash.cellOffsets3D[i], cellCoords.w); + + int neighborCellIndex; + if (grid.TryGetCellIndex(neighborCellCoords, out neighborCellIndex)) + { + InterCellSearch(cellIndex, neighborCellIndex, ref simplexShape); + } + } + + // neighboring cells in levels above the current one: + int levelIndex = gridLevels.IndexOf(cellCoords.w); + if (levelIndex >= 0) + { + levelIndex++; + for (; levelIndex < gridLevels.Length; ++levelIndex) + { + int level = gridLevels[levelIndex]; + + // calculate index of parent cell in parent level: + int4 parentCellCoords = NativeMultilevelGrid.GetParentCellCoords(cellCoords, level); + + // search in all neighbouring cells: + for (int x = -1; x <= 1; ++x) + for (int y = -1; y <= 1; ++y) + for (int z = -1; z <= 1; ++z) + { + int4 neighborCellCoords = parentCellCoords + new int4(x, y, z, 0); + + int neighborCellIndex; + if (grid.TryGetCellIndex(neighborCellCoords, out neighborCellIndex)) + { + InterCellSearch(cellIndex, neighborCellIndex, ref simplexShape); + } + } + } + } + } + + private int GetSimplexGroup(int simplexStart, int simplexSize, out ObiUtils.ParticleFlags flags, out int category, out int mask, ref bool restPositionsEnabled) + { + flags = 0; + int group = 0; + category = 0; + mask = 0; + 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; + restPositionsEnabled |= restPositions[particleIndex].w > 0.5f; + } + + return group; + } + + private void InteractionTest(int A, int B, ref BurstSimplex simplexShape) + { + // 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); + + // immediately reject simplex pairs that share particles: + for (int a = 0; a < simplexSizeA; ++a) + for (int b = 0; b < simplexSizeB; ++b) + if (simplices[simplexStartA + a] == simplices[simplexStartB + b]) + return; + + // get group for each simplex: + bool restPositionsEnabled = false; + int groupA = GetSimplexGroup(simplexStartA, simplexSizeA, out ObiUtils.ParticleFlags flagsA, out int categoryA, out int maskA, ref restPositionsEnabled); + int groupB = GetSimplexGroup(simplexStartB, simplexSizeB, out ObiUtils.ParticleFlags flagsB, out int categoryB, out int maskB, ref restPositionsEnabled); + + // if all particles are in the same group: + if (groupA == groupB) + { + // if none are self-colliding, reject the pair. + if ((flagsA & flagsB & ObiUtils.ParticleFlags.SelfCollide) == 0) + return; + } + // category-based filtering: + else if ((maskA & categoryB) == 0 || (maskB & categoryA) == 0) + return; + + // 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]; + + // Calculate particle center distance: + float d2 = math.lengthsq(positions[particleA].xyz - positions[particleB].xyz); + + float fluidDistance = math.max(fluidMaterials[particleA].x, fluidMaterials[particleB].x); + if (d2 <= fluidDistance * fluidDistance) + { + fluidInteractionsQueue.Enqueue(new FluidInteraction { particleA = particleA, particleB = particleB }); + } + } + else // at least one solid particle is present: + { + // swap simplices so that B is always the one-sided one. + if ((flagsA & ObiUtils.ParticleFlags.OneSided) != 0 && categoryA < categoryB) + { + ObiUtils.Swap(ref A, ref B); + ObiUtils.Swap(ref simplexStartA, ref simplexStartB); + ObiUtils.Swap(ref simplexSizeA, ref simplexSizeB); + ObiUtils.Swap(ref flagsA, ref flagsB); + ObiUtils.Swap(ref groupA, ref groupB); + } + + float4 simplexBary = BurstMath.BarycenterForSimplexOfSize(simplexSizeA); + float4 simplexPoint; + + simplexShape.simplexStart = simplexStartB; + simplexShape.simplexSize = simplexSizeB; + simplexShape.positions = restPositions; + simplexShape.CacheData(); + + float simplexRadiusA = 0, simplexRadiusB = 0; + + // skip the contact if there's self-intersection at rest: + if (groupA == groupB && restPositionsEnabled) + { + var restPoint = BurstLocalOptimization.Optimize(ref simplexShape, restPositions, restOrientations, radii, + simplices, simplexStartA, simplexSizeA, ref simplexBary, out simplexPoint, 4, 0); + + for (int j = 0; j < simplexSizeA; ++j) + simplexRadiusA += radii[simplices[simplexStartA + j]].x * simplexBary[j]; + + for (int j = 0; j < simplexSizeB; ++j) + simplexRadiusB += radii[simplices[simplexStartB + j]].x * restPoint.bary[j]; + + // compare distance along contact normal with radius. + if (math.dot(simplexPoint - restPoint.point, restPoint.normal) < simplexRadiusA + simplexRadiusB) + return; + } + + simplexBary = BurstMath.BarycenterForSimplexOfSize(simplexSizeA); + simplexShape.positions = positions; + simplexShape.CacheData(); + + var surfacePoint = BurstLocalOptimization.Optimize(ref simplexShape, positions, orientations, radii, + simplices, simplexStartA, simplexSizeA, ref simplexBary, out simplexPoint, optimizationIterations, optimizationTolerance); + + simplexRadiusA = 0; simplexRadiusB = 0; + float4 velocityA = float4.zero, velocityB = float4.zero, normalB = float4.zero; + + for (int j = 0; j < simplexSizeA; ++j) + { + int particleIndex = simplices[simplexStartA + j]; + simplexRadiusA += radii[particleIndex].x * simplexBary[j]; + velocityA += velocities[particleIndex] * simplexBary[j]; + } + + for (int j = 0; j < simplexSizeB; ++j) + { + int particleIndex = simplices[simplexStartB + j]; + simplexRadiusB += radii[particleIndex].x * surfacePoint.bary[j]; + velocityB += velocities[particleIndex] * surfacePoint.bary[j]; + normalB += normals[particleIndex] * surfacePoint.bary[j]; + } + + float dAB = math.dot(simplexPoint - surfacePoint.point, 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); + + contactsQueue.Enqueue(new BurstContact() + { + bodyA = A, + bodyB = B, + pointA = simplexBary, + pointB = surfacePoint.bary, + normal = surfacePoint.normal + }); + } + } + } + } + + public ParticleGrid() + { + this.grid = new NativeMultilevelGrid(1000, Allocator.Persistent); + this.particleContactQueue = new NativeQueue(Allocator.Persistent); + this.fluidInteractionQueue = new NativeQueue(Allocator.Persistent); + } + + public void Update(BurstSolverImpl solver, JobHandle inputDeps) + { + var updateGrid = new UpdateGrid + { + grid = grid, + simplexBounds = solver.simplexBounds, + simplexCount = solver.simplexCounts.simplexCount, + cellCoords = solver.cellCoords, + parameters = solver.abstraction.parameters + }; + updateGrid.Schedule(inputDeps).Complete(); + } + + public JobHandle GenerateContacts(BurstSolverImpl solver, float deltaTime) + { + + var generateParticleContactsJob = new GenerateParticleParticleContactsJob + { + grid = grid, + gridLevels = grid.populatedLevels.GetKeyArray(Allocator.TempJob), + + positions = solver.positions, + orientations = solver.orientations, + restPositions = solver.restPositions, + restOrientations = solver.restOrientations, + velocities = solver.velocities, + invMasses = solver.invMasses, + radii = solver.principalRadii, + normals = solver.normals, + fluidMaterials = solver.fluidMaterials, + phases = solver.phases, + filters = solver.filters, + + simplices = solver.simplices, + simplexCounts = solver.simplexCounts, + + particleMaterialIndices = solver.abstraction.collisionMaterials.AsNativeArray(), + collisionMaterials = ObiColliderWorld.GetInstance().collisionMaterials.AsNativeArray(), + + contactsQueue = particleContactQueue.AsParallelWriter(), + fluidInteractionsQueue = fluidInteractionQueue.AsParallelWriter(), + dt = deltaTime, + collisionMargin = solver.abstraction.parameters.collisionMargin, + optimizationIterations = solver.abstraction.parameters.surfaceCollisionIterations, + optimizationTolerance = solver.abstraction.parameters.surfaceCollisionTolerance, + }; + + return generateParticleContactsJob.Schedule(grid.CellCount, 1); + } + + public JobHandle SpatialQuery(BurstSolverImpl solver, + NativeArray shapes, + NativeArray transforms, + NativeQueue results) + { + var job = new SpatialQueryJob + { + grid = grid, + + positions = solver.abstraction.prevPositions.AsNativeArray(), + orientations = solver.abstraction.prevOrientations.AsNativeArray(), + radii = solver.abstraction.principalRadii.AsNativeArray(), + filters = solver.abstraction.filters.AsNativeArray(), + + simplices = solver.simplices, + simplexCounts = solver.simplexCounts, + + shapes = shapes, + transforms = transforms, + + results = results.AsParallelWriter(), + worldToSolver = solver.worldToSolver, + parameters = solver.abstraction.parameters + }; + + return job.Schedule(shapes.Length, 4); + } + + public void GetCells(ObiNativeAabbList cells) + { + if (cells.count == grid.usedCells.Length) + { + for (int i = 0; i < grid.usedCells.Length; ++i) + { + var cell = grid.usedCells[i]; + float size = NativeMultilevelGrid.CellSizeOfLevel(cell.Coords.w); + + float4 min = (float4)cell.Coords * size; + min[3] = 0; + + cells[i] = new Aabb(min, min + new float4(size, size, size, 0)); + } + } + } + + public void Dispose() + { + grid.Dispose(); + particleContactQueue.Dispose(); + fluidInteractionQueue.Dispose(); + } + + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ParticleGrid.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ParticleGrid.cs.meta new file mode 100644 index 00000000..9b1ea310 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ParticleGrid.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 581337416adb545a388c356940ae38be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries.meta new file mode 100644 index 00000000..e9f48027 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3c5f4522f2a394ac0a5017b7de9a31d5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstContact.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstContact.cs new file mode 100644 index 00000000..48305307 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstContact.cs @@ -0,0 +1,163 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Mathematics; + +namespace Obi +{ + public struct BurstContact : IConstraint, System.IComparable + { + 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; // contact normal on bodyB's surface. + public float4 tangent; // contact tangent on bodyB's surface. + + public float distance; // distance between bodyA's and bodyB's surface. + + public float normalLambda; + public float tangentLambda; + public float bitangentLambda; + public float stickLambda; + public float rollingFrictionImpulse; + + public int bodyA; + public int bodyB; + + 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; + } + + public int CompareTo(BurstContact other) + { + int first = bodyA.CompareTo(other.bodyA); + if (first == 0) + return bodyB.CompareTo(other.bodyB); + return first; + } + + public void CalculateTangent(float4 relativeVelocity) + { + tangent = math.normalizesafe(relativeVelocity - math.dot(relativeVelocity, normal) * normal); + } + + public float SolveAdhesion(float normalMass, float4 posA, float4 posB, float stickDistance, float stickiness, float dt) + { + + if (normalMass <= 0 || stickDistance <= 0 || stickiness <= 0 || dt <= 0) + return 0; + + distance = math.dot(posA - posB, normal); + + // calculate stickiness position correction: + float constraint = stickiness * (1 - math.max(distance / stickDistance, 0)) * dt; + + // calculate lambda multiplier: + float dlambda = -constraint / normalMass; + + // accumulate lambda: + float newStickinessLambda = math.min(stickLambda + dlambda, 0); + + // calculate lambda change and update accumulated lambda: + float lambdaChange = newStickinessLambda - stickLambda; + stickLambda = newStickinessLambda; + + return lambdaChange; + } + + public float SolvePenetration(float normalMass, float4 posA, float4 posB, float maxDepenetrationDelta) + { + if (normalMass <= 0) + return 0; + + //project position delta to normal vector: + distance = math.dot(posA - posB, normal); + + // calculate max projection distance based on depenetration velocity: + float maxProjection = math.max(-distance - maxDepenetrationDelta, 0); + + // calculate lambda multiplier: + float dlambda = -(distance + maxProjection) / normalMass; + + // accumulate lambda: + float newLambda = math.max(normalLambda + dlambda, 0); + + // calculate lambda change and update accumulated lambda: + float lambdaChange = newLambda - normalLambda; + normalLambda = newLambda; + + return lambdaChange; + } + + public float2 SolveFriction(float tangentMass, float bitangentMass, float4 relativeVelocity, float staticFriction, float dynamicFriction, float dt) + { + float2 lambdaChange = float2.zero; + + if (tangentMass <= 0 || bitangentMass <= 0 || + (dynamicFriction <= 0 && staticFriction <= 0) || (normalLambda <= 0 && stickLambda <= 0)) + return lambdaChange; + + // calculate delta projection on both friction axis: + float tangentPosDelta = math.dot(relativeVelocity, tangent); + float bitangentPosDelta = math.dot(relativeVelocity, bitangent); + + // calculate friction pyramid limit: + float dynamicFrictionCone = normalLambda / dt * dynamicFriction; + float staticFrictionCone = normalLambda / dt * staticFriction; + + // tangent impulse: + float tangentLambdaDelta = -tangentPosDelta / tangentMass; + float newTangentLambda = tangentLambda + tangentLambdaDelta; + + if (math.abs(newTangentLambda) > staticFrictionCone) + newTangentLambda = math.clamp(newTangentLambda, -dynamicFrictionCone, dynamicFrictionCone); + + lambdaChange[0] = newTangentLambda - tangentLambda; + tangentLambda = newTangentLambda; + + // bitangent impulse: + float bitangentLambdaDelta = -bitangentPosDelta / bitangentMass; + float newBitangentLambda = bitangentLambda + bitangentLambdaDelta; + + if (math.abs(newBitangentLambda) > staticFrictionCone) + newBitangentLambda = math.clamp(newBitangentLambda, -dynamicFrictionCone, dynamicFrictionCone); + + lambdaChange[1] = newBitangentLambda - bitangentLambda; + bitangentLambda = newBitangentLambda; + + return lambdaChange; + } + + + public float SolveRollingFriction(float4 angularVelocityA, + float4 angularVelocityB, + float rollingFriction, + float invMassA, + float invMassB, + ref float4 rolling_axis) + { + float totalInvMass = invMassA + invMassB; + if (totalInvMass <= 0) + return 0; + + rolling_axis = math.normalizesafe(angularVelocityA - angularVelocityB); + + float vel1 = math.dot(angularVelocityA,rolling_axis); + float vel2 = math.dot(angularVelocityB,rolling_axis); + + float relativeVelocity = vel1 - vel2; + + float maxImpulse = normalLambda * rollingFriction; + float newRollingImpulse = math.clamp(rollingFrictionImpulse - relativeVelocity / totalInvMass, -maxImpulse, maxImpulse); + float rolling_impulse_change = newRollingImpulse - rollingFrictionImpulse; + rollingFrictionImpulse = newRollingImpulse; + + return rolling_impulse_change; + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstContact.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstContact.cs.meta new file mode 100644 index 00000000..78667f13 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstContact.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 70486b82a23044fccaf324d309757b8f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstQueryResult.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstQueryResult.cs new file mode 100644 index 00000000..5306e2cd --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstQueryResult.cs @@ -0,0 +1,18 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Mathematics; +using Unity.Collections; + +namespace Obi +{ + public struct BurstQueryResult + { + public float4 simplexBary; // point A, expressed as simplex barycentric coords for simplices, as a solver-space position for colliders. + 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; + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstQueryResult.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstQueryResult.cs.meta new file mode 100644 index 00000000..11928dd1 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstQueryResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a3a82674a4b3b432ebcddfc108bb44c7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries.meta new file mode 100644 index 00000000..ce25ade9 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0a89041802caf45b3bb46e192cc3c220 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstBoxQuery.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstBoxQuery.cs new file mode 100644 index 00000000..b56f3e35 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstBoxQuery.cs @@ -0,0 +1,98 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Collections; +using Unity.Mathematics; + +namespace Obi +{ + public struct BurstBoxQuery : BurstLocalOptimization.IDistanceFunction + { + public BurstQueryShape shape; + public BurstAffineTransform colliderToSolver; + + public void Evaluate(float4 point, float4 radii, quaternion orientation, ref BurstLocalOptimization.SurfacePoint projectedPoint) + { + float4 center = shape.center * colliderToSolver.scale; + float4 size = shape.size * colliderToSolver.scale * 0.5f; + + // clamp the point to the surface of the box: + point = colliderToSolver.InverseTransformPointUnscaled(point) - center; + + /*if (shape.is2D != 0) + point[2] = 0;*/ + + // get minimum distance for each axis: + float4 distances = size - math.abs(point); + + if (distances.x >= 0 && distances.y >= 0 && distances.z >= 0) + { + // find minimum distance in all three axes and the axis index: + float min = float.MaxValue; + int axis = 0; + + for (int i = 0; i < 3; ++i) + { + if (distances[i] < min) + { + min = distances[i]; + axis = i; + } + } + + projectedPoint.normal = float4.zero; + projectedPoint.point = point; + + projectedPoint.normal[axis] = point[axis] > 0 ? 1 : -1; + projectedPoint.point[axis] = size[axis] * projectedPoint.normal[axis]; + } + else + { + projectedPoint.point = math.clamp(point, -size, size); + projectedPoint.normal = math.normalizesafe(point - projectedPoint.point); + } + + projectedPoint.point = colliderToSolver.TransformPointUnscaled(projectedPoint.point + center + projectedPoint.normal * shape.contactOffset); + projectedPoint.normal = colliderToSolver.TransformDirection(projectedPoint.normal); + } + + public void Query(int shapeIndex, + NativeArray positions, + NativeArray orientations, + NativeArray radii, + NativeArray simplices, + int simplexIndex, + int simplexStart, + int simplexSize, + + NativeQueue.ParallelWriter results, + int optimizationIterations, + float optimizationTolerance) + { + 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); + + 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; + + if (co.distance <= shape.maxDistance) + results.Enqueue(co); + } + + } + +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstBoxQuery.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstBoxQuery.cs.meta new file mode 100644 index 00000000..0e33279c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstBoxQuery.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d6b3a07d6f9da432ea6e8e0dd3eea022 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstRay.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstRay.cs new file mode 100644 index 00000000..b89248af --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstRay.cs @@ -0,0 +1,92 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Collections; +using Unity.Mathematics; +using UnityEngine; + +namespace Obi +{ + public struct BurstRay : BurstLocalOptimization.IDistanceFunction + { + public BurstQueryShape shape; + public BurstAffineTransform colliderToSolver; + + public void Evaluate(float4 point, float4 radii, quaternion orientation, ref BurstLocalOptimization.SurfacePoint projectedPoint) + { + float4x4 simplexToSolver = float4x4.TRS(point.xyz, orientation, radii.xyz); + float4x4 solverToSimplex = math.inverse(simplexToSolver); + float4x4 colliderToSimplex = math.mul(solverToSimplex, float4x4.TRS(colliderToSolver.translation.xyz, colliderToSolver.rotation, colliderToSolver.scale.xyz)); + + // 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.xyz,0))); + + float rayDistance = ObiUtils.RaySphereIntersection(rayOrigin.xyz, rayDirection.xyz, float3.zero, 1); + + if (rayDistance < 0) + { + point = colliderToSolver.InverseTransformPointUnscaled(point); + + 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); + + float4 normal = centerToPoint / (distanceToCenter + BurstMath.epsilon); + + projectedPoint.point = colliderToSolver.TransformPointUnscaled(centerLine + normal * shape.contactOffset); + projectedPoint.normal = colliderToSolver.TransformDirection(normal); + } + else + { + float4 rayPoint = math.mul(simplexToSolver, new float4((rayOrigin + rayDirection * rayDistance).xyz,1)); + float4 normal = math.normalizesafe(new float4((point - rayPoint).xyz,0)); + + projectedPoint.point = rayPoint + normal * shape.contactOffset; + projectedPoint.normal = normal; + } + } + + public void Query(int shapeIndex, + NativeArray positions, + NativeArray orientations, + NativeArray radii, + NativeArray simplices, + int simplexIndex, + int simplexStart, + int simplexSize, + + NativeQueue.ParallelWriter results, + int optimizationIterations, + float optimizationTolerance) + { + 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); + + 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; + + 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); + } + } + } + +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstRay.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstRay.cs.meta new file mode 100644 index 00000000..8d62f282 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstRay.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 57b77d0143f8a4af18df103368d328f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstSphereQuery.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstSphereQuery.cs new file mode 100644 index 00000000..82cf497e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstSphereQuery.cs @@ -0,0 +1,69 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Collections; +using Unity.Mathematics; + +namespace Obi +{ + public struct BurstSphereQuery : BurstLocalOptimization.IDistanceFunction + { + public BurstQueryShape shape; + public BurstAffineTransform colliderToSolver; + + 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) + point[2] = 0;*/ + + float radius = shape.size.x * math.cmax(colliderToSolver.scale.xyz); + float distanceToCenter = math.length(point); + + float4 normal = point / (distanceToCenter + BurstMath.epsilon); + + projectedPoint.point = colliderToSolver.TransformPointUnscaled(center + normal * (radius + shape.contactOffset)); + projectedPoint.normal = colliderToSolver.TransformDirection(normal); + } + + public void Query(int shapeIndex, + NativeArray positions, + NativeArray orientations, + NativeArray radii, + NativeArray simplices, + int simplexIndex, + int simplexStart, + int simplexSize, + + NativeQueue.ParallelWriter results, + int optimizationIterations, + float optimizationTolerance) + { + 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); + + 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; + + if (co.distance <= shape.maxDistance) + results.Enqueue(co); + } + } + +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstSphereQuery.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstSphereQuery.cs.meta new file mode 100644 index 00000000..50b176c8 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstSphereQuery.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e3c36e77eab954f2e9b12e7fd5c63a6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/SpatialQueryJob.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/SpatialQueryJob.cs new file mode 100644 index 00000000..1059408e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/SpatialQueryJob.cs @@ -0,0 +1,129 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Jobs; +using Unity.Collections; +using Unity.Mathematics; +using Unity.Burst; + +namespace Obi +{ + + [BurstCompile] + unsafe struct SpatialQueryJob : IJobParallelFor + { + //collider grid: + [ReadOnly] public NativeMultilevelGrid grid; + + // particle arrays: + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray orientations; + [ReadOnly] public NativeArray radii; + [ReadOnly] public NativeArray filters; + + // simplex arrays: + [ReadOnly] public NativeArray simplices; + [ReadOnly] public SimplexCounts simplexCounts; + + // query arrays: + [ReadOnly] public NativeArray shapes; + [ReadOnly] public NativeArray transforms; + + // output contacts queue: + [WriteOnly] + [NativeDisableParallelForRestriction] + public NativeQueue.ParallelWriter results; + + // auxiliar data: + [ReadOnly] public BurstAffineTransform worldToSolver; + [ReadOnly] public Oni.SolverParameters parameters; + + // execute for each query shape: + public void Execute(int i) + { + var shapeToSolver = worldToSolver * transforms[i]; + + // calculate solver-space aabb of query shape: + BurstAabb queryBoundsSS = CalculateShapeAABB(shapes[i]).Transformed(shapeToSolver); + + var shapeCategory = shapes[i].filter & ObiUtils.FilterCategoryBitmask; + var shapeMask = (shapes[i].filter & ObiUtils.FilterMaskBitmask) >> 16; + + bool is2D = parameters.mode == Oni.SolverParameters.Mode.Mode2D; + + // iterate over all occupied cells: + for (int c = 0; c < grid.usedCells.Length; ++c) + { + var cell = grid.usedCells[c]; + + // 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)); + + // if cell and query bounds intersect: + if (cellBounds.IntersectsAabb(in queryBoundsSS, is2D)) + { + // iterate over cell contents: + for (int k = 0; k < cell.Length; ++k) + { + int simplexStart = simplexCounts.GetSimplexStartAndSize(cell[k], out int simplexSize); + + // check if any simplex particle and the query shape should collide: + bool shouldCollide = false; + for (int j = 0; j < simplexSize; ++j) + { + var simplexCategory = filters[simplices[simplexStart + j]] & ObiUtils.FilterCategoryBitmask; + var simplexMask = (filters[simplices[simplexStart + j]] & ObiUtils.FilterMaskBitmask) >> 16; + shouldCollide |= (simplexCategory & shapeMask) != 0 && (simplexMask & shapeCategory) != 0; + } + + if (shouldCollide) + Query(shapes[i], shapeToSolver, i, cell[k], simplexStart, simplexSize); + } + } + } + } + + private BurstAabb CalculateShapeAABB(in BurstQueryShape shape) + { + float offset = shape.contactOffset + shape.maxDistance; + switch (shape.type) + { + case QueryShape.QueryType.Sphere: + return new BurstAabb(shape.center, shape.center, shape.size.x + offset); + 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.center + shape.size, offset); + } + return new BurstAabb(); + } + + private void Query(in BurstQueryShape shape, + in BurstAffineTransform shapeToSolver, + int shapeIndex, + int simplexIndex, + int simplexStart, + int simplexSize) + { + switch (shape.type) + { + case QueryShape.QueryType.Sphere: + 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}; + 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 }; + rayShape.Query(shapeIndex, positions, orientations, radii, simplices, + simplexIndex, simplexStart, simplexSize, results, parameters.surfaceCollisionIterations, parameters.surfaceCollisionTolerance); + break; + } + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/SpatialQueryJob.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/SpatialQueryJob.cs.meta new file mode 100644 index 00000000..e44e250e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Queries/SpatialQueryJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f8bb8e6f2de74ab3b2ab294100629a4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering.meta new file mode 100644 index 00000000..5085057b --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common.meta new file mode 100644 index 00000000..632682d7 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BuildParticleMeshDataJob.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BuildParticleMeshDataJob.cs new file mode 100644 index 00000000..bcb70681 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BuildParticleMeshDataJob.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BuildParticleMeshDataJob.cs.meta new file mode 100644 index 00000000..c205bf0f --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstFoamRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstFoamRenderSystem.cs new file mode 100644 index 00000000..b7257e94 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstFoamRenderSystem.cs @@ -0,0 +1,242 @@ +#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 = 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("_FadeIn", m_Solver.foamFade.x); + matProps.SetFloat("_FadeOut", m_Solver.foamFade.y); + + 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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstFoamRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstFoamRenderSystem.cs.meta new file mode 100644 index 00000000..5f9e611d --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstInstancedParticleRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstInstancedParticleRenderSystem.cs new file mode 100644 index 00000000..3441e2db --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstInstancedParticleRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstInstancedParticleRenderSystem.cs.meta new file mode 100644 index 00000000..2910089f --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstParticleRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstParticleRenderSystem.cs new file mode 100644 index 00000000..7b1460a3 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstParticleRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstParticleRenderSystem.cs.meta new file mode 100644 index 00000000..89d3acbb --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod.meta new file mode 100644 index 00000000..0222329f --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstChainRopeRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstChainRopeRenderSystem.cs new file mode 100644 index 00000000..2fefee05 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstChainRopeRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstChainRopeRenderSystem.cs.meta new file mode 100644 index 00000000..ce727dba --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstExtrudedRopeRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstExtrudedRopeRenderSystem.cs new file mode 100644 index 00000000..c133f40b --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstExtrudedRopeRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstExtrudedRopeRenderSystem.cs.meta new file mode 100644 index 00000000..0fced1ff --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstLineRopeRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstLineRopeRenderSystem.cs new file mode 100644 index 00000000..80dbaf02 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstLineRopeRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstLineRopeRenderSystem.cs.meta new file mode 100644 index 00000000..7ab2fc4e --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstMeshRopeRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstMeshRopeRenderSystem.cs new file mode 100644 index 00000000..3a78845b --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstMeshRopeRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstMeshRopeRenderSystem.cs.meta new file mode 100644 index 00000000..a4927d49 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathFrame.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathFrame.cs new file mode 100644 index 00000000..cbf52794 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathFrame.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathFrame.cs.meta new file mode 100644 index 00000000..284880b9 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathSmootherRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathSmootherRenderSystem.cs new file mode 100644 index 00000000..3d113624 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathSmootherRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathSmootherRenderSystem.cs.meta new file mode 100644 index 00000000..7cf39ab5 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ChaikinSmoothChunksJob.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ChaikinSmoothChunksJob.cs new file mode 100644 index 00000000..9a7587f8 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ChaikinSmoothChunksJob.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ChaikinSmoothChunksJob.cs.meta new file mode 100644 index 00000000..450b2cf7 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/DecimateChunksJob.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/DecimateChunksJob.cs new file mode 100644 index 00000000..6129c63b --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/DecimateChunksJob.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/DecimateChunksJob.cs.meta new file mode 100644 index 00000000..2fdbac83 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ParallelTransportJob.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ParallelTransportJob.cs new file mode 100644 index 00000000..bd8390ad --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ParallelTransportJob.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ParallelTransportJob.cs.meta new file mode 100644 index 00000000..b07ca0fa --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver.meta new file mode 100644 index 00000000..98abee02 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b6251e5c85abf48ee822588eb5da9aa2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/ApplyInertialForcesJob.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/ApplyInertialForcesJob.cs new file mode 100644 index 00000000..fa1cc8e1 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/ApplyInertialForcesJob.cs @@ -0,0 +1,46 @@ +#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 ApplyInertialForcesJob : IJobParallelFor + { + [ReadOnly] public NativeArray activeParticles; + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray invMasses; + + [ReadOnly] public float4 angularVel; + [ReadOnly] public float4 inertialAccel; + [ReadOnly] public float4 eulerAccel; + + [ReadOnly] public float worldLinearInertiaScale; + [ReadOnly] public float worldAngularInertiaScale; + + [NativeDisableParallelForRestriction] public NativeArray velocities; + + [ReadOnly] public float deltaTime; + + public void Execute(int index) + { + int i = activeParticles[index]; + + if (invMasses[i] > 0) + { + float4 euler = new float4(math.cross(eulerAccel.xyz, positions[i].xyz), 0); + float4 centrifugal = new float4(math.cross(angularVel.xyz, math.cross(angularVel.xyz, positions[i].xyz)), 0); + float4 coriolis = 2 * new float4(math.cross(angularVel.xyz, velocities[i].xyz), 0); + float4 angularAccel = euler + coriolis + centrifugal; + + velocities[i] -= (inertialAccel * worldLinearInertiaScale + angularAccel * worldAngularInertiaScale) * deltaTime; + } + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/ApplyInertialForcesJob.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/ApplyInertialForcesJob.cs.meta new file mode 100644 index 00000000..ffb53be3 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/ApplyInertialForcesJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9583eea8cf2234362a59c97e3f908a85 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BoundsReductionJob.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BoundsReductionJob.cs new file mode 100644 index 00000000..10d96a74 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BoundsReductionJob.cs @@ -0,0 +1,86 @@ +#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 CalculateSimplexBoundsJob : IJobParallelFor + { + [ReadOnly] public NativeArray radii; + [ReadOnly] public NativeArray fluidMaterials; + [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; + public NativeArray simplexBounds; + public NativeArray reducedBounds; + + [ReadOnly] public Oni.SolverParameters parameters; + [ReadOnly] public float dt; + + public void Execute(int i) + { + 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 + parameters.collisionMargin + (m >= 0 ? collisionMaterials[m].stickDistance : 0); + + // Expand simplex bounds, using both the particle's original position and its velocity. + sxBounds.EncapsulateParticle(positions[p], + BurstIntegration.IntegrateLinear(positions[p], velocities[p], dt * parameters.particleCCD), + math.max(solidRadius, fluidMaterials[p].x * 0.5f)); + + soBounds.EncapsulateParticle(positions[p], + BurstIntegration.IntegrateLinear(positions[p], velocities[p], dt), + solidRadius); + } + + simplexBounds[i] = sxBounds; + reducedBounds[i] = soBounds; + } + } + + [BurstCompile] + struct BoundsReductionJob : IJobParallelFor + { + [NativeDisableParallelForRestriction] public NativeArray bounds; // the length of bounds must be a multiple of size. + [ReadOnly] public int stride; + [ReadOnly] public int size; + + public void Execute(int first) + { + int baseIndex = first * size; + for (int i = 1; i < size; ++i) + { + int dest = baseIndex * stride; + int source = (baseIndex + i) * stride; + + if (source < bounds.Length) + { + var v = bounds[dest]; + v.EncapsulateBounds(bounds[source]); + bounds[dest] = v; + } + } + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BoundsReductionJob.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BoundsReductionJob.cs.meta new file mode 100644 index 00000000..e630da17 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BoundsReductionJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 31e84cee4b2444511a44d1c8ff0c8cd1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BurstSolverImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BurstSolverImpl.cs new file mode 100644 index 00000000..90a3a638 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BurstSolverImpl.cs @@ -0,0 +1,265 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) using UnityEngine; using Unity.Jobs; using Unity.Mathematics; using Unity.Collections; + +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; + + // 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 activeParticles; 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 anisotropies; + + // 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(); // 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); 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, deltaTime = deltaTime, }; 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; + + cellCoords = abstraction.cellCoords.AsNativeArray(); if (simplexBounds.IsCreated) simplexBounds.Dispose(); simplexBounds = new NativeArray(counts.simplexCount, Allocator.Persistent); + + if (reducedBounds.IsCreated) reducedBounds.Dispose(); + + 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; + + // calculate bounding boxes for all simplices: + var boundsJob = new CalculateSimplexBoundsJob() + { + radii = principalRadii, + fluidMaterials = fluidMaterials, + positions = positions, + velocities = velocities, + simplices = simplices, + simplexCounts = simplexCounts, + particleMaterialIndices = collisionMaterials, + collisionMaterials = ObiColliderWorld.GetInstance().collisionMaterials.AsNativeArray(), + parameters = abstraction.parameters, + simplexBounds = simplexBounds, + reducedBounds = reducedBounds, + dt = stepTime + }; + + burstHandle.jobHandle = boundsJob.Schedule(simplexCounts.simplexCount, 64, burstHandle.jobHandle); + + // parallel reduction: + 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; } 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) { 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(); 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.externalForces.Upload(); + abstraction.externalTorques.Upload(); + + // 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() + { + // Initialize wind values with solver's ambient wind. + abstraction.wind.WipeToValue(abstraction.parameters.ambientWind); + abstraction.wind.Upload(); + } + + public void RequestReadback() + { + } public IObiJobHandle CollisionDetection(IObiJobHandle inputDeps, float stepTime) { BurstJobHandle burstHandle = inputDeps as BurstJobHandle; if (burstHandle == null) return inputDeps; + + 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 = 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; // 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(); + + // 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); + + // 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); + + abstraction.particleContacts.ResizeUninitialized(particleGrid.particleContactQueue.Count); DequeueIntoArrayJob dequeueParticleContacts = new DequeueIntoArrayJob { InputQueue = particleGrid.particleContactQueue, OutputArray = rawParticleContacts }; + + 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; + + // Apply aerodynamics + 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 = 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: + burstHandle.jobHandle = ApplyConstraints(burstHandle.jobHandle, stepTime, substepTime, steps, timeLeft); // 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); + + // velocity constraints: + burstHandle.jobHandle = ApplyVelocityCorrections(burstHandle.jobHandle, 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.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); + + // Update diffuse particles: + int substepsLeft = (int)math.round(timeLeft / substepTime); + int foamPadding = (int)math.ceil(abstraction.substeps / (float)abstraction.foamSubsteps); + + if (substepsLeft % foamPadding == 0) + burstHandle.jobHandle = UpdateDiffuseParticles(burstHandle.jobHandle, substepTime * foamPadding); return burstHandle; } 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, substepTime); } } // 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; } 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, + + 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, 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); + + //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) + { + var system = abstraction.GetRenderSystem() as BurstFoamRenderSystem; + if (system != null) + { + int* dispatchPtr = (int*)abstraction.foamCount.AddressOfElement(0); + + for (int i = 0; i < system.renderers.Count; ++i) + { + var emitJob = new EmitParticlesJob + { + // 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 = prevPositions, + velocities = velocities, + angularVelocities = angularVelocities, + principalRadii = principalRadii, + + outputPositions = abstraction.foamPositions.AsNativeArray(), + outputVelocities = abstraction.foamVelocities.AsNativeArray(), + outputColors = abstraction.foamColors.AsNativeArray(), + outputAttributes = abstraction.foamAttributes.AsNativeArray(), + + dispatchBuffer = abstraction.foamCount.AsNativeArray(), + + 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); + } + + var updateJob = new UpdateParticlesJob + { + positions = prevPositions, + orientations = renderableOrientations, + principalRadii = renderableRadii, + velocities = velocities, + 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), + 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]; + } + 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 + + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BurstSolverImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BurstSolverImpl.cs.meta new file mode 100644 index 00000000..597b2b50 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BurstSolverImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d37e8b7fe851346debbbd28e17c1e593 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/DequeueIntoArrayJob.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/DequeueIntoArrayJob.cs new file mode 100644 index 00000000..43a5066e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/DequeueIntoArrayJob.cs @@ -0,0 +1,26 @@ +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) +using Unity.Burst; +using Unity.Jobs; +using Unity.Collections; + +namespace Obi +{ + [BurstCompile] + public struct DequeueIntoArrayJob : IJob where T : unmanaged + { + public int StartIndex; + public NativeQueue InputQueue; + [WriteOnly] public NativeArray OutputArray; + + public void Execute() + { + int queueCount = InputQueue.Count; + + for (int i = StartIndex; i < StartIndex + queueCount; i++) + { + OutputArray[i] = InputQueue.Dequeue(); + } + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/DequeueIntoArrayJob.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/DequeueIntoArrayJob.cs.meta new file mode 100644 index 00000000..a62baf18 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/DequeueIntoArrayJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8e9889084567047d389e79cf39fc3391 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FindFluidParticlesJob.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FindFluidParticlesJob.cs new file mode 100644 index 00000000..f7bb2dac --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FindFluidParticlesJob.cs @@ -0,0 +1,33 @@ +#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 FindFluidParticlesJob : IJob + { + [ReadOnly] public NativeArray activeParticles; + [ReadOnly] public NativeArray phases; + + public NativeList fluidParticles; + + public void Execute() + { + fluidParticles.Clear(); + + for (int i = 0; i < activeParticles.Length; ++i) + { + int p = activeParticles[i]; + if ((phases[p] & (int)ObiUtils.ParticleFlags.Fluid) != 0) + fluidParticles.Add(p); + } + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FindFluidParticlesJob.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FindFluidParticlesJob.cs.meta new file mode 100644 index 00000000..b146b734 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FindFluidParticlesJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 58485b95b70f24a809a8f9509faabdad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FoamParticlesJob.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FoamParticlesJob.cs new file mode 100644 index 00000000..cd6ce790 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FoamParticlesJob.cs @@ -0,0 +1,325 @@ +#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 + { + [ReadOnly] [DeallocateOnJobCompletion] public NativeArray activeParticles; + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray velocities; + [ReadOnly] public NativeArray principalRadii; + [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 deltaTime; + + //https://www.shadertoy.com/view/4djSRW + 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); + } + + 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); + } + + + void RandomInCylinder(float seed, float4 pos1, float4 pos2, float radius, out float4 position, out float3 velocity) + { + float3 rand = hash33(math.lerp(pos1.xyz, pos2.xyz, seed)); + + float3 v = pos2.xyz - pos1.xyz; + float d = math.length(v); + float3 b1 = d > BurstMath.epsilon ? v / d : v; + 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(pos1.xyz + b1 * d * rand.z + velocity, 0); + } + + 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(math.length(angVel.xyz), 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; + RandomInCylinder(j, positions[p], positions[p] + velocities[p] * deltaTime, principalRadii[p].x, out pos, out radialVelocity); + + // calculate initial life/size/color: + float initialLife = velocityPotential * (lifetime - hash13(positions[p].xyz) * lifetime * lifetimeRandom); + float initialSize = particleSize - hash13(positions[p].xyz + new float3(0.51f, 0.23f, 0.1f)) * particleSize * 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 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 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; + float kernelSum = -packedData.w; + uint neighbourCount = 0; + + float4 diffusePos = inputPositions[count]; + float4 avgPos = float4.zero; + + 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); + + 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 = (1 / fluidData[p].x) * densityKernel.W(d, radii.x); + + kernelSum += w; + advectedVelocity += velocities[p] * w; + avgPos += positions[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 > 3) + { + // advection: + forces = packedData.z / deltaTime * (advectedVelocity / (kernelSum + packedData.w) - 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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FoamParticlesJob.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FoamParticlesJob.cs.meta new file mode 100644 index 00000000..bdd0b48e --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/InterpolationJob.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/InterpolationJob.cs new file mode 100644 index 00000000..63fdcd54 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/InterpolationJob.cs @@ -0,0 +1,53 @@ +#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 InterpolationJob : IJobParallelFor + { + [ReadOnly] public NativeArray positions; + [ReadOnly] public NativeArray startPositions; + [ReadOnly] public NativeArray endPositions; + [WriteOnly] public NativeArray renderablePositions; + + [ReadOnly] public NativeArray orientations; + [ReadOnly] public NativeArray startOrientations; + [ReadOnly] public NativeArray endOrientations; + [WriteOnly] public NativeArray renderableOrientations; + + [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) + { + 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] = endPositions[i]; + renderableOrientations[i] = math.normalize(endOrientations[i]); + renderableRadii[i] = principalRadii[i]; + } + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/InterpolationJob.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/InterpolationJob.cs.meta new file mode 100644 index 00000000..6516fdb7 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/InterpolationJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8928e13e186424d31a319347de871c16 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/PredictPositionsJob.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/PredictPositionsJob.cs new file mode 100644 index 00000000..106fa387 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/PredictPositionsJob.cs @@ -0,0 +1,82 @@ +#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 PredictPositionsJob : IJobParallelFor + { + [ReadOnly] public NativeArray activeParticles; + [ReadOnly] public NativeArray phases; + [ReadOnly] public NativeArray buoyancies; + + // linear/position properties: + [ReadOnly] public NativeArray externalForces; + [ReadOnly] public NativeArray inverseMasses; + [NativeDisableParallelForRestriction] public NativeArray previousPositions; + [NativeDisableParallelForRestriction] public NativeArray positions; + [NativeDisableParallelForRestriction] public NativeArray velocities; + + // angular/orientation properties: + [ReadOnly] public NativeArray externalTorques; + [ReadOnly] public NativeArray inverseRotationalMasses; + [NativeDisableParallelForRestriction] public NativeArray previousOrientations; + [NativeDisableParallelForRestriction] public NativeArray orientations; + [NativeDisableParallelForRestriction] public NativeArray angularVelocities; + + [ReadOnly] public float4 gravity; + [ReadOnly] public float deltaTime; + [ReadOnly] public bool is2D; + + public void Execute(int index) + { + int i = activeParticles[index]; + + // the previous position/orientation is the current position/orientation at the start of the step. + previousPositions[i] = positions[i]; + previousOrientations[i] = orientations[i]; + + if (inverseMasses[i] > 0) + { + float4 effectiveGravity = gravity; + + // Adjust gravity for buoyant fluid particles: + if ((phases[i] & (int)ObiUtils.ParticleFlags.Fluid) != 0) + effectiveGravity *= -buoyancies[i].z; + + // apply external forces and gravity: + float4 vel = velocities[i] + (inverseMasses[i] * externalForces[i] + effectiveGravity) * deltaTime; + + // project velocity to 2D plane if needed: + if (is2D) + vel[3] = 0; + + velocities[i] = vel; + } + + if (inverseRotationalMasses[i] > 0) + { + // apply external torques (simplification: we don't use full inertia tensor here) + 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 float3(0, 0, 1)); + + angularVelocities[i] = new float4(angularVel, angularVelocities[i].w); + } + + // integrate velocities: + positions[i] = BurstIntegration.IntegrateLinear(positions[i], velocities[i], deltaTime); + orientations[i] = BurstIntegration.IntegrateAngular(orientations[i], angularVelocities[i], deltaTime); + + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/PredictPositionsJob.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/PredictPositionsJob.cs.meta new file mode 100644 index 00000000..ea542bbe --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/PredictPositionsJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fcd4a6f15c3844229a95fa41f283d408 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateNormalsJob.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateNormalsJob.cs new file mode 100644 index 00000000..a8f64e02 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateNormalsJob.cs @@ -0,0 +1,121 @@ +#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 ResetNormals : IJobParallelFor + { + [ReadOnly] public NativeArray phases; + [WriteOnly] public NativeArray normals; + [WriteOnly] public NativeArray tangents; + + public void Execute(int i) + { + // leave fluid normals intact. + if ((phases[i] & (int)ObiUtils.ParticleFlags.Fluid) == 0) + { + normals[i] = float4.zero; + tangents[i] = float4.zero; + } + } + } + + [BurstCompile] + unsafe struct UpdateTriangleNormalsJob : IJobParallelFor + { + [ReadOnly] public NativeArray deformableTriangles; + [ReadOnly] public NativeArray deformableTriangleUVs; + [ReadOnly] public NativeArray renderPositions; + + [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; + } + + 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 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 = (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 (math.lengthsq(normals[i]) > BurstMath.epsilon && + math.lengthsq(tangents[i]) > BurstMath.epsilon && + (phases[i] & (int)ObiUtils.ParticleFlags.Fluid) == 0) + { + 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 diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateNormalsJob.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateNormalsJob.cs.meta new file mode 100644 index 00000000..89f9e14c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateNormalsJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c46e86e164afb414fbc171972a53eb91 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdatePositionsJob.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdatePositionsJob.cs new file mode 100644 index 00000000..9401d9bc --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdatePositionsJob.cs @@ -0,0 +1,68 @@ +#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 UpdatePositionsJob : IJobParallelFor + { + [ReadOnly] public NativeArray activeParticles; + + // linear/position properties: + [NativeDisableParallelForRestriction] public NativeArray positions; + [ReadOnly] public NativeArray previousPositions; + [NativeDisableParallelForRestriction] public NativeArray velocities; + + // angular/orientation properties: + [NativeDisableParallelForRestriction] public NativeArray orientations; + [ReadOnly] public NativeArray previousOrientations; + [NativeDisableParallelForRestriction] public NativeArray angularVelocities; + + [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: + 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 (velMagnitude * velMagnitude * 0.5f + angularVelMagnitude * angularVelMagnitude * 0.5f <= sleepThreshold) + { + positions[i] = previousPositions[i]; + orientations[i] = previousOrientations[i]; + velocity = float4.zero; + angVelocity.xyz = float3.zero; + } + + velocities[i] = velocity; + angularVelocities[i] = angVelocity; + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdatePositionsJob.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdatePositionsJob.cs.meta new file mode 100644 index 00000000..1bb7363e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdatePositionsJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a41d3897adb37457da8385a46e6f0bb6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateVelocitiesJob.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateVelocitiesJob.cs new file mode 100644 index 00000000..32a18964 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateVelocitiesJob.cs @@ -0,0 +1,58 @@ +#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 UpdateVelocitiesJob : IJobParallelFor + { + [ReadOnly] public NativeArray activeParticles; + + // linear/position properties: + [ReadOnly] public NativeArray inverseMasses; + [ReadOnly] public NativeArray previousPositions; + [NativeDisableParallelForRestriction] public NativeArray positions; + [NativeDisableParallelForRestriction] [WriteOnly] public NativeArray velocities; + + // angular/orientation properties: + [ReadOnly] public NativeArray inverseRotationalMasses; + [ReadOnly] public NativeArray previousOrientations; + [NativeDisableParallelForRestriction] public NativeArray orientations; + [NativeDisableParallelForRestriction] public NativeArray angularVelocities; + + [ReadOnly] public float deltaTime; + [ReadOnly] public bool is2D; + + // The code actually running on the job + public void Execute(int index) + { + int i = activeParticles[index]; + + // Project particles on the XY plane if we are in 2D mode: + if (is2D) + { + // restrict position to the 2D plane + float4 pos = positions[i]; + pos[2] = previousPositions[i][2]; + positions[i] = pos; + } + + if (inverseMasses[i] > 0) + velocities[i] = BurstIntegration.DifferentiateLinear(positions[i], previousPositions[i], deltaTime); + else + velocities[i] = float4.zero; + + if (inverseRotationalMasses[i] > 0) + angularVelocities[i] = new float4(BurstIntegration.DifferentiateAngular(orientations[i], previousOrientations[i], deltaTime).xyz, angularVelocities[i].w); + else + angularVelocities[i] = float4.zero; + } + } +} +#endif \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateVelocitiesJob.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateVelocitiesJob.cs.meta new file mode 100644 index 00000000..f437dcec --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateVelocitiesJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d10fd506f9f2645ecbf2d61a4634a5ba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute.meta new file mode 100644 index 00000000..18db0ca7 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4e491460f88fa4ee49cdb796a0b8a923 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions.meta new file mode 100644 index 00000000..bd5f862e --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeBox.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeBox.cs new file mode 100644 index 00000000..c79f40e3 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeBox.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeBox.cs.meta new file mode 100644 index 00000000..d5d5809e --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeCapsule.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeCapsule.cs new file mode 100644 index 00000000..576fe40e --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeCapsule.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeCapsule.cs.meta new file mode 100644 index 00000000..13e33af8 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeColliderWorld.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeColliderWorld.cs new file mode 100644 index 00000000..6bc34566 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeColliderWorld.cs @@ -0,0 +1,472 @@ +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; + private const int maxCells = 512 * 512; + private 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", (int)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 = ObiColliderWorld.GetInstance().colliderAabbs.AsComputeBuffer(); + + if (colliderCount != shapes.count || shapesBuffer == null || !shapesBuffer.IsValid()) + shapesBuffer = ObiColliderWorld.GetInstance().colliderShapes.AsComputeBuffer(); + + if (colliderCount != shapes.count || transformsBuffer == null || !transformsBuffer.IsValid()) + transformsBuffer = ObiColliderWorld.GetInstance().colliderTransforms.AsComputeBuffer(); + + // 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(); + } + } + + public void SetRigidbodies(ObiNativeRigidbodyList rigidbody) + { + if (rigidbodyCount != rigidbody.count || rigidbodiesBuffer == null || !rigidbodiesBuffer.IsValid()) + { + rigidbodyCount = rigidbody.count; + rigidbodiesBuffer = rigidbody.SafeAsComputeBuffer(); + } + } + + public void SetCollisionMaterials(ObiNativeCollisionMaterialList materials) + { + if (materialCount != materials.count || materialsBuffer == null || !materialsBuffer.IsValid()) + { + materialCount = materials.count; + materialsBuffer = materials.SafeAsComputeBuffer(); + } + } + + public void SetTriangleMeshData(ObiNativeTriangleMeshHeaderList headers, ObiNativeBIHNodeList nodes, ObiNativeTriangleList triangles, ObiNativeVector3List vertices) + { + if (triangleMeshCount != headers.count || triangleMeshHeaders == null || !triangleMeshHeaders.IsValid()) + { + triangleMeshCount = headers.count; + triangleMeshHeaders = headers.AsComputeBuffer(); + bihNodes = nodes.AsComputeBuffer(); + this.triangles = triangles.AsComputeBuffer(); + this.vertices = vertices.AsComputeBuffer(); + } + } + + public void SetEdgeMeshData(ObiNativeEdgeMeshHeaderList headers, ObiNativeBIHNodeList nodes, ObiNativeEdgeList edges, ObiNativeVector2List vertices) + { + if (edgeMeshCount != headers.count || edgeMeshHeaders == null || !edgeMeshHeaders.IsValid()) + { + edgeMeshCount = headers.count; + edgeMeshHeaders = headers.AsComputeBuffer(); + edgeBihNodes = nodes.AsComputeBuffer(); + this.edges = edges.AsComputeBuffer(); + edgeVertices = vertices.AsComputeBuffer(); + } + } + + public void SetDistanceFieldData(ObiNativeDistanceFieldHeaderList headers, ObiNativeDFNodeList nodes) + { + if (distanceFieldCount != headers.count || distanceFieldHeaders == null || !distanceFieldHeaders.IsValid()) + { + distanceFieldCount = headers.count; + distanceFieldHeaders = headers.AsComputeBuffer(); + dfNodes = nodes.AsComputeBuffer(); + } + } + + public void SetHeightFieldData(ObiNativeHeightFieldHeaderList headers, ObiNativeFloatList samples) + { + if (heightFieldCount != headers.count || heightFieldHeaders == null || !heightFieldHeaders.IsValid()) + { + heightFieldCount = headers.count; + heightFieldHeaders = headers.AsComputeBuffer(); + heightFieldSamples = samples.AsComputeBuffer(); + } + } + + public void UpdateWorld(float deltaTime) + { + if (colliderCount > 0) + { + // Send data from the CPU to the GPU: + ObiColliderWorld.GetInstance().colliderShapes.Upload(); + ObiColliderWorld.GetInstance().colliderTransforms.Upload(); + ObiColliderWorld.GetInstance().colliderAabbs.Upload(); + ObiColliderWorld.GetInstance().rigidbodies.Upload(); + ObiColliderWorld.GetInstance().forceZones.Upload(); + + 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, "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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeColliderWorld.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeColliderWorld.cs.meta new file mode 100644 index 00000000..54b57c22 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeDistanceField.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeDistanceField.cs new file mode 100644 index 00000000..2c6214af --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeDistanceField.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeDistanceField.cs.meta new file mode 100644 index 00000000..578a29d2 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeEdgeMesh.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeEdgeMesh.cs new file mode 100644 index 00000000..c36045c5 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeEdgeMesh.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeEdgeMesh.cs.meta new file mode 100644 index 00000000..a2552e67 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeHeightField.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeHeightField.cs new file mode 100644 index 00000000..2e8cd144 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeHeightField.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeHeightField.cs.meta new file mode 100644 index 00000000..f97c873a --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeSphere.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeSphere.cs new file mode 100644 index 00000000..aa4a272a --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeSphere.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeSphere.cs.meta new file mode 100644 index 00000000..3a907d4a --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeTriangleMesh.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeTriangleMesh.cs new file mode 100644 index 00000000..5dd29a77 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeTriangleMesh.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeTriangleMesh.cs.meta new file mode 100644 index 00000000..5de323c8 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/SpatialQueries.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/SpatialQueries.cs new file mode 100644 index 00000000..2f93cc57 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/SpatialQueries.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/SpatialQueries.cs.meta new file mode 100644 index 00000000..6edfb437 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/ComputeBackend.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/ComputeBackend.cs new file mode 100644 index 00000000..4ca52c2c --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/ComputeBackend.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/ComputeBackend.cs.meta new file mode 100644 index 00000000..af17c5d5 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/ComputeJobHandle.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/ComputeJobHandle.cs new file mode 100644 index 00000000..e6029290 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/ComputeJobHandle.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/ComputeJobHandle.cs.meta new file mode 100644 index 00000000..0b145fa5 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/ComputeMath.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/ComputeMath.cs new file mode 100644 index 00000000..7ec820cb --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/ComputeMath.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/ComputeMath.cs.meta new file mode 100644 index 00000000..62890efd --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints.meta new file mode 100644 index 00000000..d57b2cf1 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0040fe7f7368047d29f179b7d7bf4d1a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics.meta new file mode 100644 index 00000000..78335751 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5b92b6684fbd249cd9732bf9b3303e03 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraints.cs new file mode 100644 index 00000000..9d3c6b7e --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraints.cs.meta new file mode 100644 index 00000000..ec3d6752 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraintsBatch.cs new file mode 100644 index 00000000..b2ed627b --- /dev/null +++ b/xiaofang/Assets/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.normalsIntBuffer); + 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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraintsBatch.cs.meta new file mode 100644 index 00000000..d19b18bc --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend.meta new file mode 100644 index 00000000..d595c99f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d16c953a082614e88bd02d0f99035c3a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraints.cs new file mode 100644 index 00000000..29de0b6f --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraints.cs.meta new file mode 100644 index 00000000..cca00768 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraintsBatch.cs new file mode 100644 index 00000000..7c0f7da7 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraintsBatch.cs.meta new file mode 100644 index 00000000..3c5bc0d6 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist.meta new file mode 100644 index 00000000..230c84ff --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 253f34729aa7d4bbabe8eca30fdb88af +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraints.cs new file mode 100644 index 00000000..3d51f946 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraints.cs.meta new file mode 100644 index 00000000..1ca86042 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraintsBatch.cs new file mode 100644 index 00000000..3efed6f5 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraintsBatch.cs.meta new file mode 100644 index 00000000..10707e48 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain.meta new file mode 100644 index 00000000..e9b29a82 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 06d157d45e7fd46f08b501d67d3d632b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraints.cs new file mode 100644 index 00000000..35411219 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraints.cs.meta new file mode 100644 index 00000000..92334258 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraintsBatch.cs new file mode 100644 index 00000000..2009f6ac --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraintsBatch.cs.meta new file mode 100644 index 00000000..e659564b --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision.meta new file mode 100644 index 00000000..2da8691e --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraints.cs new file mode 100644 index 00000000..9b0515e2 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraints.cs.meta new file mode 100644 index 00000000..9aa02e50 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraintsBatch.cs new file mode 100644 index 00000000..04bee228 --- /dev/null +++ b/xiaofang/Assets/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 substepTime) + { + 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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraintsBatch.cs.meta new file mode 100644 index 00000000..aea17db9 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraints.cs new file mode 100644 index 00000000..1aeff401 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraints.cs.meta new file mode 100644 index 00000000..5bf1233a --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraintsBatch.cs new file mode 100644 index 00000000..a144d81e --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraintsBatch.cs.meta new file mode 100644 index 00000000..2950234a --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsBatchImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsBatchImpl.cs new file mode 100644 index 00000000..dee457fe --- /dev/null +++ b/xiaofang/Assets/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 substepTime) + { + 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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsBatchImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsBatchImpl.cs.meta new file mode 100644 index 00000000..d6da30fd --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsImpl.cs new file mode 100644 index 00000000..ccc18165 --- /dev/null +++ b/xiaofang/Assets/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 substepTime); + 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 substepTime) + { + // initialize all batches in parallel: + if (batches.Count > 0) + { + for (int i = 0; i < batches.Count; ++i) + if (batches[i].enabled) batches[i].Initialize(substepTime); + } + + } + + 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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsImpl.cs.meta new file mode 100644 index 00000000..f703dbeb --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density.meta new file mode 100644 index 00000000..afcb3329 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraints.cs new file mode 100644 index 00000000..8960367f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraints.cs @@ -0,0 +1,151 @@ +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 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"); + 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 ApplyVelocityCorrections(float deltaTime) + { + if (m_Solver.particleGrid.sortedFluidIndices != null && m_Solver.cellCoordsBuffer != null) + { + constraintsShader.SetFloat("deltaTime", deltaTime); + + constraintsShader.SetBuffer(applyAtmosphereKernel, "neighborCounts", m_Solver.particleGrid.neighborCounts); + constraintsShader.SetBuffer(applyAtmosphereKernel, "neighbors", m_Solver.particleGrid.neighbors); + constraintsShader.SetBuffer(applyAtmosphereKernel, "sortedToOriginal", m_Solver.particleGrid.sortedFluidIndices); + + constraintsShader.SetBuffer(applyAtmosphereKernel, "invMasses", m_Solver.invMassesBuffer); + constraintsShader.SetBuffer(applyAtmosphereKernel, "velocities", m_Solver.velocitiesBuffer); + constraintsShader.SetBuffer(applyAtmosphereKernel, "wind", m_Solver.windBuffer); + constraintsShader.SetBuffer(applyAtmosphereKernel, "normals", m_Solver.normalsBuffer); + constraintsShader.SetBuffer(applyAtmosphereKernel, "userData", m_Solver.userDataBuffer); + constraintsShader.SetBuffer(applyAtmosphereKernel, "sortedPositions", m_Solver.particleGrid.sortedPositions); + constraintsShader.SetBuffer(applyAtmosphereKernel, "sortedPrincipalRadii", m_Solver.particleGrid.sortedPrincipalRadii); + constraintsShader.SetBuffer(applyAtmosphereKernel, "sortedFluidMaterials", m_Solver.particleGrid.sortedFluidMaterials); + constraintsShader.SetBuffer(applyAtmosphereKernel, "sortedFluidInterface", m_Solver.particleGrid.sortedFluidInterface); + constraintsShader.SetBuffer(applyAtmosphereKernel, "sortedUserData", m_Solver.particleGrid.sortedUserDataColor); + constraintsShader.SetBuffer(applyAtmosphereKernel, "fluidData", m_Solver.fluidDataBuffer); + 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.DispatchIndirect(averageAnisotropyKernel, m_Solver.fluidDispatchBuffer); + } + + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraints.cs.meta new file mode 100644 index 00000000..181e12e4 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraintsBatch.cs new file mode 100644 index 00000000..bc5673a6 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraintsBatch.cs @@ -0,0 +1,94 @@ + +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); + + // 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.sortedFluidDataVel); + 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.anisotropiesBuffer);//solverImplementation.renderableOrientationsBuffer); + 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.anisotropiesBuffer);//solverImplementation.renderableOrientationsBuffer); + shader.SetBuffer(applyKernel, "prevPositions", solverImplementation.prevPositionsBuffer); + shader.SetBuffer(applyKernel, "massCenters", solverImplementation.normalsBuffer); + shader.SetBuffer(applyKernel, "prevMassCenters", solverImplementation.renderablePositionsBuffer); + shader.SetBuffer(applyKernel, "sortedFluidData", solverImplementation.particleGrid.sortedFluidDataVel); + 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, "renderableOrientations", solverImplementation.anisotropiesBuffer);//solverImplementation.renderableOrientationsBuffer); + shader.SetBuffer(applyPositionDeltaKernel, "orientations", solverImplementation.orientationsBuffer); + shader.SetBuffer(applyPositionDeltaKernel, "fluidData", solverImplementation.fluidDataBuffer); + shader.SetBuffer(applyPositionDeltaKernel, "sortedFluidData", solverImplementation.particleGrid.sortedFluidDataVel); + shader.SetBuffer(applyPositionDeltaKernel, "prevOrientations", solverImplementation.prevOrientationsBuffer); + 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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraintsBatch.cs.meta new file mode 100644 index 00000000..14470864 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance.meta new file mode 100644 index 00000000..6db3da33 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: beca9bcaa99b64d8188c2ac127314259 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraints.cs new file mode 100644 index 00000000..50c2ab4c --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraints.cs.meta new file mode 100644 index 00000000..8a98a0c3 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraintsBatch.cs new file mode 100644 index 00000000..0982c29b --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraintsBatch.cs.meta new file mode 100644 index 00000000..19d57d42 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision.meta new file mode 100644 index 00000000..3ee25521 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraints.cs new file mode 100644 index 00000000..9c3d62d6 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraints.cs.meta new file mode 100644 index 00000000..3049cbd7 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraintsBatch.cs new file mode 100644 index 00000000..dc7edfa0 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraintsBatch.cs @@ -0,0 +1,104 @@ +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 substepTime) + { + 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("deltaTime", substepTime); + + shader.DispatchIndirect(initializeKernel, this.solverImplementation.particleGrid.dispatchBuffer); + } + } + + public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) + { + //if (m_ConstraintCount > 0) + + 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, "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, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); + shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); + shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); + + shader.SetFloat("deltaTime", 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, "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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraintsBatch.cs.meta new file mode 100644 index 00000000..5075a575 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraints.cs new file mode 100644 index 00000000..aaec1e79 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraints.cs.meta new file mode 100644 index 00000000..7ca80b7a --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraintsBatch.cs new file mode 100644 index 00000000..64743ef6 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraintsBatch.cs.meta new file mode 100644 index 00000000..214b031d --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin.meta new file mode 100644 index 00000000..c21a5f4f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b03d5abd353fb4064bf5677d949196a1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraints.cs new file mode 100644 index 00000000..79955762 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraints.cs @@ -0,0 +1,48 @@ +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 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"); + } + + 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(); + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraints.cs.meta new file mode 100644 index 00000000..5f50419c --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraintsBatch.cs new file mode 100644 index 00000000..e4688210 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraintsBatch.cs @@ -0,0 +1,140 @@ +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 substepTime) + { + 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(substepTime); + } + + 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 RequestDataReadback() + { + lambdasList.Readback(); + } + + public void WaitForReadback() + { + lambdasList.WaitForReadback(); + } + + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraintsBatch.cs.meta new file mode 100644 index 00000000..365b01ba --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching.meta new file mode 100644 index 00000000..ac46a10b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 21c4f0318a4dd4112aeb7065a1251e2a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraints.cs new file mode 100644 index 00000000..87856a1a --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraints.cs.meta new file mode 100644 index 00000000..c6df3eeb --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraintsBatch.cs new file mode 100644 index 00000000..ae553420 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraintsBatch.cs.meta new file mode 100644 index 00000000..82b0d2be --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin.meta new file mode 100644 index 00000000..afbbedb2 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e3f96b782e06d47d699bad2fbd4712e1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraints.cs new file mode 100644 index 00000000..7a41a9a2 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraints.cs.meta new file mode 100644 index 00000000..ffce2d87 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraintsBatch.cs new file mode 100644 index 00000000..53cf5e82 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraintsBatch.cs.meta new file mode 100644 index 00000000..6a56a4f0 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch.meta new file mode 100644 index 00000000..72b5b708 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8fd1b55deaf68449f9fc2f037f032b4c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraints.cs new file mode 100644 index 00000000..e5f48a8f --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraints.cs.meta new file mode 100644 index 00000000..296677c8 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraintsBatch.cs new file mode 100644 index 00000000..ba09e511 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraintsBatch.cs.meta new file mode 100644 index 00000000..03b6837e --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear.meta new file mode 100644 index 00000000..d29894d3 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8cc7d1795a6bd4f75927ef02b05e44e7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraints.cs new file mode 100644 index 00000000..d5116e65 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraints.cs.meta new file mode 100644 index 00000000..e91936fa --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraintsBatch.cs new file mode 100644 index 00000000..99173315 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraintsBatch.cs.meta new file mode 100644 index 00000000..062a0cfc --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether.meta new file mode 100644 index 00000000..4c0427c6 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4ee9753d7b4f7422b9057618aa73476b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraints.cs new file mode 100644 index 00000000..a1ddceef --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraints.cs.meta new file mode 100644 index 00000000..f663b0e3 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraintsBatch.cs new file mode 100644 index 00000000..d482a917 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraintsBatch.cs.meta new file mode 100644 index 00000000..93feeaa4 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume.meta new file mode 100644 index 00000000..ef341e7a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b0eea52c14b4b4e7698c65a183951102 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraints.cs new file mode 100644 index 00000000..e673c5ed --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraints.cs.meta new file mode 100644 index 00000000..e01c6e26 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraintsBatch.cs new file mode 100644 index 00000000..8f7e9b5e --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraintsBatch.cs.meta new file mode 100644 index 00000000..d661247b --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures.meta new file mode 100644 index 00000000..e93da584 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeParticleGrid.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeParticleGrid.cs new file mode 100644 index 00000000..41d8de28 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeParticleGrid.cs @@ -0,0 +1,405 @@ +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 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 sortedFluidDataVel; // Used by Density constraints: no need to be sorted (constraints output). Reuse for velocities (foam advection and mesher). + + 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"); + 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 (sortedFluidDataVel != null) + sortedFluidDataVel.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; + sortedFluidDataVel = 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); + sortedFluidDataVel = 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.normalsIntBuffer); + 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); + } + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeParticleGrid.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeParticleGrid.cs.meta new file mode 100644 index 00000000..3316aef4 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputePrefixSum.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputePrefixSum.cs new file mode 100644 index 00000000..4f29ab9f --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputePrefixSum.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputePrefixSum.cs.meta new file mode 100644 index 00000000..09aece2e --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeSort.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeSort.cs new file mode 100644 index 00000000..26c6af2b --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeSort.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeSort.cs.meta new file mode 100644 index 00000000..4705d420 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Queries.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Queries.meta new file mode 100644 index 00000000..ae5d9ccf --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeBoxQuery.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeBoxQuery.cs new file mode 100644 index 00000000..9e40726a --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeBoxQuery.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeBoxQuery.cs.meta new file mode 100644 index 00000000..1236be06 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeRayQuery.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeRayQuery.cs new file mode 100644 index 00000000..4fe96fd1 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeRayQuery.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeRayQuery.cs.meta new file mode 100644 index 00000000..a075d168 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeSphereQuery.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeSphereQuery.cs new file mode 100644 index 00000000..3c53dfb5 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeSphereQuery.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeSphereQuery.cs.meta new file mode 100644 index 00000000..5eb442cc --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering.meta new file mode 100644 index 00000000..a6090f8a --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common.meta new file mode 100644 index 00000000..3fc9d9a3 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeFoamRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeFoamRenderSystem.cs new file mode 100644 index 00000000..f9a7a101 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeFoamRenderSystem.cs @@ -0,0 +1,154 @@ +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", camera.transform.forward); + foamShader.SetBuffer(sortKernel, "inputPositions", solver.abstraction.foamPositions.computeBuffer); + foamShader.SetBuffer(sortKernel, "inputVelocities", solver.abstraction.foamVelocities.computeBuffer); + foamShader.SetBuffer(sortKernel, "inputColors", solver.abstraction.foamColors.computeBuffer); + foamShader.SetBuffer(sortKernel, "inputAttributes", solver.abstraction.foamAttributes.computeBuffer); + 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("_FadeIn", m_Solver.foamFade.x); + matProps.SetFloat("_FadeOut", m_Solver.foamFade.y); + + 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); + } + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeFoamRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeFoamRenderSystem.cs.meta new file mode 100644 index 00000000..07ab5673 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeInstancedParticleRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeInstancedParticleRenderSystem.cs new file mode 100644 index 00000000..08e235cb --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeInstancedParticleRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeInstancedParticleRenderSystem.cs.meta new file mode 100644 index 00000000..39147cf5 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeParticleRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeParticleRenderSystem.cs new file mode 100644 index 00000000..1508f19c --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeParticleRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeParticleRenderSystem.cs.meta new file mode 100644 index 00000000..ac29d03b --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod.meta new file mode 100644 index 00000000..3242dc7f --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeChainRopeRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeChainRopeRenderSystem.cs new file mode 100644 index 00000000..3c73db95 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeChainRopeRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeChainRopeRenderSystem.cs.meta new file mode 100644 index 00000000..40dadbaf --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeExtrudedRopeRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeExtrudedRopeRenderSystem.cs new file mode 100644 index 00000000..423db645 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeExtrudedRopeRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeExtrudedRopeRenderSystem.cs.meta new file mode 100644 index 00000000..d02481a3 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeLineRopeRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeLineRopeRenderSystem.cs new file mode 100644 index 00000000..4e160671 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeLineRopeRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeLineRopeRenderSystem.cs.meta new file mode 100644 index 00000000..b737e7d3 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeMeshRopeRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeMeshRopeRenderSystem.cs new file mode 100644 index 00000000..2abb1191 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeMeshRopeRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeMeshRopeRenderSystem.cs.meta new file mode 100644 index 00000000..eb266867 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputePathSmootherRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputePathSmootherRenderSystem.cs new file mode 100644 index 00000000..9f363f23 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputePathSmootherRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputePathSmootherRenderSystem.cs.meta new file mode 100644 index 00000000..acdff97c --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Solver.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Solver.meta new file mode 100644 index 00000000..3c8e3c2f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Solver.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e6a74baa6b875488ea6366478aece6a3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Solver/ComputeSolverImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Solver/ComputeSolverImpl.cs new file mode 100644 index 00000000..44f348f4 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Solver/ComputeSolverImpl.cs @@ -0,0 +1,1275 @@ +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 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 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 normalsIntBuffer; + public GraphicsBuffer tangentsIntBuffer; + + 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 storeStartStateKernel; + private int predictPositionsKernel; + private int updateVelocitiesKernel; + private int updatePositionsKernel; + 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 emitFoamKernel; + private int copyAliveKernel; + private int updateFoamKernel; + private int copyKernel; + + private ComputeShader foamDensityShader; + private int clearGridKernel; + private int insertGridKernel; + private int sortByGridKernel; + private int computeDensityKernel; + private int applyDensityKernel; + + 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"); + storeStartStateKernel = solverShader.FindKernel("StoreStartState"); + predictPositionsKernel = solverShader.FindKernel("PredictPositions"); + updateVelocitiesKernel = solverShader.FindKernel("UpdateVelocities"); + updatePositionsKernel = solverShader.FindKernel("UpdatePositions"); + 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"); + emitFoamKernel = foamShader.FindKernel("Emit"); + copyAliveKernel = foamShader.FindKernel("CopyAliveCount"); + updateFoamKernel = foamShader.FindKernel("Update"); + copyKernel = foamShader.FindKernel("Copy"); + + 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"); + + 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.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(); + + normalsIntBuffer?.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.principalRadii.Upload(); + abstraction.invMasses.Upload(); + abstraction.invRotationalMasses.Upload(); + abstraction.phases.Upload(); + abstraction.filters.Upload(); + abstraction.externalForces.Upload(); + abstraction.externalTorques.Upload(); + abstraction.wind.WipeToValue(abstraction.parameters.ambientWind); + abstraction.wind.Upload(); + + abstraction.life.Upload(); + abstraction.fluidData.Upload(); + abstraction.userData.Upload(); + abstraction.fluidInterface.Upload(); + abstraction.fluidMaterials.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(); + } + + 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.SetBuffer(applyInertialForcesKernel, "activeParticles", activeParticlesBuffer); + solverShader.SetBuffer(applyInertialForcesKernel, "positions", positionsBuffer); + solverShader.SetBuffer(applyInertialForcesKernel, "velocities", velocitiesBuffer); + solverShader.SetBuffer(applyInertialForcesKernel, "invMasses", invMassesBuffer); + + solverShader.Dispatch(applyInertialForcesKernel, threadGroups, 1, 1); + } + + return jobHandle; + } + + public void SetDeformableTriangles(ObiNativeIntList indices, ObiNativeVector2List uvs) + { + if (indices.count > 0) + { + var 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) + { + var 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); + } + } + + public IObiJobHandle UpdateBounds(IObiJobHandle inputDeps, float stepTime) + { + if (activeParticleCount > 0 && reducedBounds != null) + { + boundsShader.SetFloat("deltaTime", stepTime); + + 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); + } + + 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) + { + 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(); + 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 (normalsIntBuffer != null) + { + normalsIntBuffer.Dispose(); + normalsIntBuffer = null; + } + + if (tangentsIntBuffer != null) + { + tangentsIntBuffer.Dispose(); + tangentsIntBuffer = null; + } + + if (abstraction.normals.count > 0) + { + var zeroes = new VInt4[abstraction.normals.count]; + normalsIntBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, abstraction.normals.count, abstraction.normals.stride); + normalsIntBuffer.SetData(zeroes); + + tangentsIntBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, abstraction.normals.count, abstraction.normals.stride); + tangentsIntBuffer.SetData(zeroes); + } + + 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(interpolateKernel, "positions", positionsBuffer); + if (startPositionsBuffer != null) solverShader.SetBuffer(interpolateKernel, "R_startPositions", startPositionsBuffer); + if (endPositionsBuffer != null) solverShader.SetBuffer(interpolateKernel, "R_endPositions", endPositionsBuffer); + if (renderablePositionsBuffer != null) solverShader.SetBuffer(interpolateKernel, "renderablePositions", renderablePositionsBuffer); + if (orientationsBuffer != null) solverShader.SetBuffer(interpolateKernel, "orientations", orientationsBuffer); + if (startOrientationsBuffer != null) solverShader.SetBuffer(interpolateKernel, "R_startOrientations", startOrientationsBuffer); + if (endOrientationsBuffer != null) solverShader.SetBuffer(interpolateKernel, "R_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); + + if (positionsBuffer != null) solverShader.SetBuffer(storeStartStateKernel, "positions", positionsBuffer); + if (startPositionsBuffer != null) solverShader.SetBuffer(storeStartStateKernel, "startPositions", startPositionsBuffer); + if (endPositionsBuffer != null) solverShader.SetBuffer(storeStartStateKernel, "endPositions", endPositionsBuffer); + if (orientationsBuffer != null) solverShader.SetBuffer(storeStartStateKernel, "orientations", orientationsBuffer); + if (startOrientationsBuffer != null) solverShader.SetBuffer(storeStartStateKernel, "startOrientations", startOrientationsBuffer); + if (endOrientationsBuffer != null) solverShader.SetBuffer(storeStartStateKernel, "endOrientations", endOrientationsBuffer); + } + + 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(); + + 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) { + UpdateFoamDensity(); + + 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) + { + // if there's no active particles yet, don't do anything: + if (activeParticleCount > 0) + { + int threadGroups = ComputeMath.ThreadGroupCount(activeParticleCount, 128); + solverShader.SetInt("particleCount", activeParticleCount); + + solverShader.SetFloat("deltaTime", substepTime); + solverShader.SetFloat("velocityScale", Mathf.Pow(1 - Mathf.Clamp(m_Solver.parameters.damping, 0, 1), substepTime)); + + // Apply aerodynamics + constraints[(int)Oni.ConstraintType.Aerodynamics].Project(stepTime, substepTime, steps, timeLeft); + + // Predict positions: + solverShader.Dispatch(predictPositionsKernel, threadGroups, 1, 1); + + ApplyConstraints(stepTime, substepTime, steps, timeLeft); + + // Update velocities; + solverShader.Dispatch(updateVelocitiesKernel, threadGroups, 1, 1); + + // Postprocess velocities: + ApplyVelocityCorrections(substepTime); + + // Update positions: + solverShader.Dispatch(updatePositionsKernel, threadGroups, 1, 1); + } + + // Update diffuse particles: + int substepsLeft = Mathf.RoundToInt(timeLeft / substepTime); + int foamPadding = Mathf.CeilToInt(abstraction.substeps / (float)abstraction.foamSubsteps); + + if (substepsLeft % foamPadding == 0) + UpdateDiffuseParticles(substepTime * foamPadding); + + return handle; + } + + private void ApplyVelocityCorrections(float deltaTime) + { + 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); + } + } + + private void ApplyConstraints(float stepTime, float substepTime, int substeps, 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(substepTime); } } + + // 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, substeps, 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, substeps, 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, substeps, timeLeft); param = m_Solver.GetConstraintParameters(Oni.ConstraintType.Collision); if (param.enabled && param.iterations > 0) constraints[(int)Oni.ConstraintType.Collision].Project(stepTime, substepTime, substeps, timeLeft); + } + + 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) && normalsIntBuffer != null) + { + threadGroups = ComputeMath.ThreadGroupCount(normalsIntBuffer.count, 128); + deformableTrisShader.SetInt("normalsCount", normalsIntBuffer.count); + deformableTrisShader.SetBuffer(resetNormalsKernel, "phases", phasesBuffer); + deformableTrisShader.SetBuffer(resetNormalsKernel, "normals", normalsIntBuffer); + deformableTrisShader.SetBuffer(resetNormalsKernel, "tangents", 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, "normals", normalsIntBuffer); + deformableTrisShader.SetBuffer(updateNormalsKernel, "tangents", 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, "wind", windBuffer); + deformableTrisShader.SetBuffer(updateEdgeNormalsKernel, "normals", normalsIntBuffer); + + deformableTrisShader.Dispatch(updateEdgeNormalsKernel, threadGroups, 1, 1); + } + + // Update particle orientations + threadGroups = ComputeMath.ThreadGroupCount(normalsIntBuffer.count, 128); + deformableTrisShader.SetBuffer(orientationFromNormalsKernel, "phases", phasesBuffer); + deformableTrisShader.SetBuffer(orientationFromNormalsKernel, "renderableOrientations", renderableOrientationsBuffer); + deformableTrisShader.SetBuffer(orientationFromNormalsKernel, "normals", normalsIntBuffer); + deformableTrisShader.SetBuffer(orientationFromNormalsKernel, "tangents", tangentsIntBuffer); + + deformableTrisShader.Dispatch(orientationFromNormalsKernel, threadGroups, 1, 1); + } + + //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 UpdateFoamDensity() + { + 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.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("invMass", 1000 * Mathf.Pow(radius * 2, 3 - (int)abstraction.parameters.mode)); + foamDensityShader.SetFloat("surfaceTension", system.renderers[i].surfaceTension); + + 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, "sortedPositions", auxPositions); + 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", auxVelocities); + 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, "sortedPositions", auxPositions); + foamDensityShader.SetBuffer(applyDensityKernel, "sortedToOriginal", auxSortedToOriginal); + foamDensityShader.SetBuffer(applyDensityKernel, "fluidData", auxVelocities); + 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 UpdateDiffuseParticles(float deltaTime) + { + var system = abstraction.GetRenderSystem() as ComputeFoamRenderSystem; + if (system != null && m_Solver.maxFoamParticles > 0 && particleGrid.sortedUserDataColor != null) + { + foamShader.SetFloat("deltaTime", deltaTime); + 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("maxCells", particleGrid.maxCells); + + foamShader.SetInt("pointCount", simplexCounts.pointCount); + foamShader.SetInt("edgeCount", simplexCounts.edgeCount); + foamShader.SetInt("triangleCount", simplexCounts.triangleCount); + + foamShader.SetBuffer(sortDataKernel, "positions", prevPositionsBuffer); + foamShader.SetBuffer(sortDataKernel, "velocities", velocitiesBuffer); + foamShader.SetBuffer(sortDataKernel, "orientations", renderableOrientationsBuffer); + foamShader.SetBuffer(sortDataKernel, "principalRadii", renderableRadiiBuffer); + foamShader.SetBuffer(sortDataKernel, "sortedPositions", particleGrid.sortedPositions); + foamShader.SetBuffer(sortDataKernel, "sortedVelocities", particleGrid.sortedFluidDataVel); + foamShader.SetBuffer(sortDataKernel, "sortedOrientations", particleGrid.sortedPrevPosOrientations); + foamShader.SetBuffer(sortDataKernel, "sortedRadii", particleGrid.sortedPrincipalRadii); + foamShader.SetBuffer(sortDataKernel, "sortedToOriginal", particleGrid.sortedFluidIndices); + foamShader.SetBuffer(sortDataKernel, "fluidMaterial", fluidMaterialsBuffer); + foamShader.SetBuffer(sortDataKernel, "fluidData", fluidDataBuffer); + foamShader.SetBuffer(sortDataKernel, "dispatch", fluidDispatchBuffer); + foamShader.DispatchIndirect(sortDataKernel, fluidDispatchBuffer); + + int threadGroups; + foamShader.SetBuffer(emitFoamKernel, "positions", prevPositionsBuffer); + foamShader.SetBuffer(emitFoamKernel, "velocities", velocitiesBuffer); + foamShader.SetBuffer(emitFoamKernel, "angularVelocities", angularVelocitiesBuffer); + 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); + 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); + + 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.sortedFluidDataVel); + 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; + } + + 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/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Solver/ComputeSolverImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Compute/Solver/ComputeSolverImpl.cs.meta new file mode 100644 index 00000000..53995cd7 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface.meta new file mode 100644 index 00000000..21a345be --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d4b76e41a8d95486abaf6cefe4451e85 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Collisions.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Collisions.meta new file mode 100644 index 00000000..3d563385 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Collisions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 26d4fb7ae70404953b2fe6daed5564d7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs new file mode 100644 index 00000000..56a124c1 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs @@ -0,0 +1,24 @@ +using UnityEngine; +using System.Collections; +using Unity.Jobs; + +namespace Obi +{ + public interface IColliderWorldImpl + { + int referenceCount { get; } + + void UpdateWorld(float deltaTime); + + void SetColliders(ObiNativeColliderShapeList shapes, ObiNativeAabbList bounds, ObiNativeAffineTransformList transforms); + void SetForceZones(ObiNativeForceZoneList forceZones); + void SetRigidbodies(ObiNativeRigidbodyList rigidbody); + + void SetCollisionMaterials(ObiNativeCollisionMaterialList materials); + + void SetTriangleMeshData(ObiNativeTriangleMeshHeaderList headers, ObiNativeBIHNodeList nodes, ObiNativeTriangleList triangles, ObiNativeVector3List vertices); + void SetEdgeMeshData(ObiNativeEdgeMeshHeaderList headers, ObiNativeBIHNodeList nodes, ObiNativeEdgeList triangles, ObiNativeVector2List vertices); + void SetDistanceFieldData(ObiNativeDistanceFieldHeaderList headers, ObiNativeDFNodeList nodes); + void SetHeightFieldData(ObiNativeHeightFieldHeaderList headers, ObiNativeFloatList samples); + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs.meta new file mode 100644 index 00000000..074d487d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 89f411e99368641bda6ba6dd0864c8c6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs.orig b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs.orig new file mode 100644 index 00000000..640762fb --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs.orig @@ -0,0 +1,27 @@ +using UnityEngine; +using System.Collections; +using Unity.Jobs; + +namespace Obi +{ + public interface IColliderWorldImpl + { +<<<<<<< HEAD + void UpdateWorld(float deltaTime); +======= + int referenceCount { get; } + + void UpdateWorld(); +>>>>>>> 56Hotfix + + void SetColliders(ObiNativeColliderShapeList shapes, ObiNativeAabbList bounds, ObiNativeAffineTransformList transforms, int count); + void SetRigidbodies(ObiNativeRigidbodyList rigidbody); + + void SetCollisionMaterials(ObiNativeCollisionMaterialList materials); + + void SetTriangleMeshData(ObiNativeTriangleMeshHeaderList headers, ObiNativeBIHNodeList nodes, ObiNativeTriangleList triangles, ObiNativeVector3List vertices); + void SetEdgeMeshData(ObiNativeEdgeMeshHeaderList headers, ObiNativeBIHNodeList nodes, ObiNativeEdgeList triangles, ObiNativeVector2List vertices); + void SetDistanceFieldData(ObiNativeDistanceFieldHeaderList headers, ObiNativeDFNodeList nodes); + void SetHeightFieldData(ObiNativeHeightFieldHeaderList headers, ObiNativeFloatList samples); + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs.orig.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs.orig.meta new file mode 100644 index 00000000..3eac5a6a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs.orig.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1a37affa245de4938b08eb9ff13f2c13 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints.meta new file mode 100644 index 00000000..f569b9ec --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 92371fdf7eced49a58fe7a78f21d85e0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IAerodynamicConstraintsBatchImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IAerodynamicConstraintsBatchImpl.cs new file mode 100644 index 00000000..d895a735 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IAerodynamicConstraintsBatchImpl.cs @@ -0,0 +1,10 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public interface IAerodynamicConstraintsBatchImpl : IConstraintsBatchImpl + { + void SetAerodynamicConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList aerodynamicCoeffs, int count); + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IAerodynamicConstraintsBatchImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IAerodynamicConstraintsBatchImpl.cs.meta new file mode 100644 index 00000000..ec621fcb --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IAerodynamicConstraintsBatchImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a0f082ce0011f44c68afb3e08a94174f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendConstraintsBatchImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendConstraintsBatchImpl.cs new file mode 100644 index 00000000..b193e7f5 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendConstraintsBatchImpl.cs @@ -0,0 +1,10 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public interface IBendConstraintsBatchImpl : IConstraintsBatchImpl + { + void SetBendConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList restBends, ObiNativeVector2List bendingStiffnesses, ObiNativeVector2List plasticity, ObiNativeFloatList lambdas, int count); + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendConstraintsBatchImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendConstraintsBatchImpl.cs.meta new file mode 100644 index 00000000..7cf161a9 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendConstraintsBatchImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 04ed7586a63754fedac80c4d72ccc001 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendTwistConstraintsBatchImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendTwistConstraintsBatchImpl.cs new file mode 100644 index 00000000..49771707 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendTwistConstraintsBatchImpl.cs @@ -0,0 +1,10 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public interface IBendTwistConstraintsBatchImpl : IConstraintsBatchImpl + { + void SetBendTwistConstraints(ObiNativeIntList orientationIndices, ObiNativeQuaternionList restDarboux, ObiNativeVector3List stiffnesses, ObiNativeVector2List plasticity, ObiNativeFloatList lambdas, int count); + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendTwistConstraintsBatchImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendTwistConstraintsBatchImpl.cs.meta new file mode 100644 index 00000000..dbf23c82 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendTwistConstraintsBatchImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 80c2392ca65914fdbac721d82d5266d5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IChainConstraintsBatchImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IChainConstraintsBatchImpl.cs new file mode 100644 index 00000000..5cb62079 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IChainConstraintsBatchImpl.cs @@ -0,0 +1,10 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public interface IChainConstraintsBatchImpl : IConstraintsBatchImpl + { + void SetChainConstraints(ObiNativeIntList particleIndices, ObiNativeVector2List restLengths, ObiNativeIntList firstIndex, ObiNativeIntList numIndex, int count); + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IChainConstraintsBatchImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IChainConstraintsBatchImpl.cs.meta new file mode 100644 index 00000000..c606a1e2 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IChainConstraintsBatchImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 51e802e7c035e4ce799a5afb80a5da5c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderCollisionConstraintsBatchImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderCollisionConstraintsBatchImpl.cs new file mode 100644 index 00000000..89eeba09 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderCollisionConstraintsBatchImpl.cs @@ -0,0 +1,10 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public interface IColliderCollisionConstraintsBatchImpl : IConstraintsBatchImpl + { + + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderCollisionConstraintsBatchImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderCollisionConstraintsBatchImpl.cs.meta new file mode 100644 index 00000000..c1bf39c6 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderCollisionConstraintsBatchImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bad55e75f72144e6b992f17ad436af57 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderFrictionConstraintsBatchImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderFrictionConstraintsBatchImpl.cs new file mode 100644 index 00000000..8e5d68be --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderFrictionConstraintsBatchImpl.cs @@ -0,0 +1,10 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public interface IColliderFrictionConstraintsBatchImpl : IConstraintsBatchImpl + { + + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderFrictionConstraintsBatchImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderFrictionConstraintsBatchImpl.cs.meta new file mode 100644 index 00000000..b5cb7ccd --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderFrictionConstraintsBatchImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce5da28cc60854096a6af5377bc0b9ba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsBatchImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsBatchImpl.cs new file mode 100644 index 00000000..88141ec3 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsBatchImpl.cs @@ -0,0 +1,29 @@ + +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public interface IConstraintsBatchImpl + { + Oni.ConstraintType constraintType + { + get; + } + + IConstraints constraints + { + get; + } + + bool enabled + { + set; + get; + } + + void Destroy(); + void SetConstraintCount(int constraintCount); + int GetConstraintCount(); + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsBatchImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsBatchImpl.cs.meta new file mode 100644 index 00000000..c35570b3 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsBatchImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6631e8d65517d4eb7adfaec19126e754 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsImpl.cs new file mode 100644 index 00000000..27f4159b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsImpl.cs @@ -0,0 +1,22 @@ + +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public interface IConstraints + { + Oni.ConstraintType constraintType + { + get; + } + + ISolverImpl solver + { + get; + } + + int GetConstraintCount(); + } + +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsImpl.cs.meta new file mode 100644 index 00000000..f594dc1a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8198ad7e2d14140879a794fc8f90e61d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDensityConstraintsBatchImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDensityConstraintsBatchImpl.cs new file mode 100644 index 00000000..d0784037 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDensityConstraintsBatchImpl.cs @@ -0,0 +1,10 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public interface IDensityConstraintsBatchImpl : IConstraintsBatchImpl + { + + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDensityConstraintsBatchImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDensityConstraintsBatchImpl.cs.meta new file mode 100644 index 00000000..5cb2c6e0 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDensityConstraintsBatchImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b2df20fbf9eee489c9999427bedc7f00 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDistanceConstraintsBatchImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDistanceConstraintsBatchImpl.cs new file mode 100644 index 00000000..0219bfdc --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDistanceConstraintsBatchImpl.cs @@ -0,0 +1,10 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public interface IDistanceConstraintsBatchImpl : IConstraintsBatchImpl + { + void SetDistanceConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList restLengths, ObiNativeVector2List stiffnesses, ObiNativeFloatList lambdas, int count); + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDistanceConstraintsBatchImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDistanceConstraintsBatchImpl.cs.meta new file mode 100644 index 00000000..547a2780 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDistanceConstraintsBatchImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 462485304564147b08d192696258a593 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleCollisionConstraintsBatchImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleCollisionConstraintsBatchImpl.cs new file mode 100644 index 00000000..1228835f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleCollisionConstraintsBatchImpl.cs @@ -0,0 +1,10 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public interface IParticleCollisionConstraintsBatchImpl : IConstraintsBatchImpl + { + + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleCollisionConstraintsBatchImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleCollisionConstraintsBatchImpl.cs.meta new file mode 100644 index 00000000..206847c6 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleCollisionConstraintsBatchImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e1fef58a2a6c74dd08e04b9df48f028e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleFrictionConstraintsBatchImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleFrictionConstraintsBatchImpl.cs new file mode 100644 index 00000000..5bf2fb87 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleFrictionConstraintsBatchImpl.cs @@ -0,0 +1,10 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public interface IParticleFrictionConstraintsBatchImpl : IConstraintsBatchImpl + { + + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleFrictionConstraintsBatchImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleFrictionConstraintsBatchImpl.cs.meta new file mode 100644 index 00000000..93764bbf --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleFrictionConstraintsBatchImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d283cf8766664a728b1a3372c4a423a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IPinConstraintsBatchImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IPinConstraintsBatchImpl.cs new file mode 100644 index 00000000..3f934c7a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IPinConstraintsBatchImpl.cs @@ -0,0 +1,10 @@ + +using System.Collections.Generic; + +namespace Obi +{ + public interface IPinConstraintsBatchImpl : IConstraintsBatchImpl + { + void SetPinConstraints(ObiNativeIntList particleIndices, ObiNativeIntList colliderIndices, ObiNativeVector4List offsets, ObiNativeQuaternionList restDarbouxVectors, ObiNativeFloatList stiffnesses, ObiNativeFloatList lambdas, int count); + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IPinConstraintsBatchImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IPinConstraintsBatchImpl.cs.meta new file mode 100644 index 00000000..49bf0532 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IPinConstraintsBatchImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 339a70e0be9984072a153f58552747e7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IShapeMatchingConstraintsBatchImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IShapeMatchingConstraintsBatchImpl.cs new file mode 100644 index 00000000..10ed3044 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IShapeMatchingConstraintsBatchImpl.cs @@ -0,0 +1,20 @@ +namespace Obi +{ + public interface IShapeMatchingConstraintsBatchImpl : IConstraintsBatchImpl + { + 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); + + void CalculateRestShapeMatching(); + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IShapeMatchingConstraintsBatchImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IShapeMatchingConstraintsBatchImpl.cs.meta new file mode 100644 index 00000000..85a812c3 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IShapeMatchingConstraintsBatchImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 793544a177038489599056d49197b4b7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ISkinConstraintsBatchImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ISkinConstraintsBatchImpl.cs new file mode 100644 index 00000000..8d960137 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ISkinConstraintsBatchImpl.cs @@ -0,0 +1,10 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public interface ISkinConstraintsBatchImpl : IConstraintsBatchImpl + { + void SetSkinConstraints(ObiNativeIntList particleIndices, ObiNativeVector4List skinPoints, ObiNativeVector4List skinNormals, ObiNativeFloatList skinRadiiBackstop, ObiNativeFloatList skinCompliance, ObiNativeFloatList lambdas, int count); + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ISkinConstraintsBatchImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ISkinConstraintsBatchImpl.cs.meta new file mode 100644 index 00000000..ada65b30 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ISkinConstraintsBatchImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7c42e394fbac64742a7d3aae172e7750 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStitchConstraintsBatchImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStitchConstraintsBatchImpl.cs new file mode 100644 index 00000000..72b9bf6c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStitchConstraintsBatchImpl.cs @@ -0,0 +1,10 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public interface IStitchConstraintsBatchImpl : IConstraintsBatchImpl + { + void SetStitchConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList stiffnesses, ObiNativeFloatList lambdas, int count); + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStitchConstraintsBatchImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStitchConstraintsBatchImpl.cs.meta new file mode 100644 index 00000000..94e46397 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStitchConstraintsBatchImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f42ef0ded9a564c599a8797894ea1d1e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStretchShearConstraintsBatchImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStretchShearConstraintsBatchImpl.cs new file mode 100644 index 00000000..92ad6e7a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStretchShearConstraintsBatchImpl.cs @@ -0,0 +1,10 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public interface IStretchShearConstraintsBatchImpl : IConstraintsBatchImpl + { + void SetStretchShearConstraints(ObiNativeIntList particleIndices, ObiNativeIntList orientationIndices, ObiNativeFloatList restLengths, ObiNativeQuaternionList restOrientations, ObiNativeVector3List stiffnesses, ObiNativeFloatList lambdas, int count); + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStretchShearConstraintsBatchImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStretchShearConstraintsBatchImpl.cs.meta new file mode 100644 index 00000000..6287a9b8 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStretchShearConstraintsBatchImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4afb32b230ee849909c3b9b246b6a51e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ITetherConstraintsBatchImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ITetherConstraintsBatchImpl.cs new file mode 100644 index 00000000..f4fb07ee --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ITetherConstraintsBatchImpl.cs @@ -0,0 +1,10 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public interface ITetherConstraintsBatchImpl : IConstraintsBatchImpl + { + void SetTetherConstraints(ObiNativeIntList particleIndices, ObiNativeVector2List maxLengthScale, ObiNativeFloatList stiffnesses, ObiNativeFloatList lambdas, int count); + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ITetherConstraintsBatchImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ITetherConstraintsBatchImpl.cs.meta new file mode 100644 index 00000000..77342bd8 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ITetherConstraintsBatchImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b7ea8208967a0450a85e41d98a4f0f57 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IVolumeConstraintsBatchImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IVolumeConstraintsBatchImpl.cs new file mode 100644 index 00000000..ee1468b9 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IVolumeConstraintsBatchImpl.cs @@ -0,0 +1,16 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public interface IVolumeConstraintsBatchImpl : IConstraintsBatchImpl + { + void SetVolumeConstraints(ObiNativeIntList triangles, + ObiNativeIntList firstTriangle, + ObiNativeIntList numTriangles, + ObiNativeFloatList restVolumes, + ObiNativeVector2List pressureStiffness, + ObiNativeFloatList lambdas, + int count); + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IVolumeConstraintsBatchImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IVolumeConstraintsBatchImpl.cs.meta new file mode 100644 index 00000000..3ec9a34e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IVolumeConstraintsBatchImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f5f8748ef424c445d949c21d3528e6ee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/IObiBackend.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/IObiBackend.cs new file mode 100644 index 00000000..47e101f8 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/IObiBackend.cs @@ -0,0 +1,18 @@ +using UnityEngine; +using System; +using System.Collections; + +namespace Obi +{ + /** + * Base class for backend implementations. + */ + public interface IObiBackend + { + #region Solver + ISolverImpl CreateSolver(ObiSolver solver, int capacity); + void DestroySolver(ISolverImpl solver); + #endregion + } + +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/IObiBackend.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/IObiBackend.cs.meta new file mode 100644 index 00000000..7101122f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/IObiBackend.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3212c809e81a349d298b283ff8b1f367 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/IObiJobHandle.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/IObiJobHandle.cs new file mode 100644 index 00000000..137e033a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/IObiJobHandle.cs @@ -0,0 +1,8 @@ +namespace Obi +{ + public interface IObiJobHandle + { + void Complete(); + void Release(); + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/IObiJobHandle.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/IObiJobHandle.cs.meta new file mode 100644 index 00000000..364b7d5f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/IObiJobHandle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2f2948e6b45fe44c09866380b7ebb2ff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/JobHandlePool.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/JobHandlePool.cs new file mode 100644 index 00000000..c27e279b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/JobHandlePool.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; + +namespace Obi +{ + + /** + * Simple pool to avoid allocating job handles at runtime. Only a small number of handles + * are expected, so once a handle is borrowed from the pool it cannot be individually returned: all + * borrowed handles are returned to the pool at the end of each step. + */ + public class JobHandlePool where T : IObiJobHandle , new() + { + private List pool; + private int borrowedHandles; + + public JobHandlePool(int initialSize) + { + borrowedHandles = 0; + pool = new List(initialSize); + for (int i = 0; i < initialSize; ++i) + pool.Add(new T()); + } + + public T Borrow() + { + // expand pool if needed (no pool doubling, simply add one extra handle). + if (borrowedHandles == pool.Count) + pool.Add(new T()); + + return pool[borrowedHandles++]; + } + + public void ReleaseAll() + { + borrowedHandles = 0; + for (int i = 0; i < pool.Count; ++i) + pool[i].Release(); + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/JobHandlePool.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/JobHandlePool.cs.meta new file mode 100644 index 00000000..f9be91f0 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/JobHandlePool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 41815ed20fd8a498ca433a2d90ee1136 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Rendering.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Rendering.meta new file mode 100644 index 00000000..a168ded5 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Rendering/IRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Rendering/IRenderSystem.cs new file mode 100644 index 00000000..5ecb6a41 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Rendering/IRenderSystem.cs @@ -0,0 +1,93 @@ +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 int IndexOf(T renderer) + { + return list.IndexOf(renderer); + } + + public IReadOnlyList AsReadOnly() + { + return list.AsReadOnly(); + } + + public bool RemoveRenderer(T renderer) + { + return list.Remove(renderer); + } + + 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/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Rendering/IRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Rendering/IRenderSystem.cs.meta new file mode 100644 index 00000000..2828c535 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Solver.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Solver.meta new file mode 100644 index 00000000..f46f3719 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Solver.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 05a823cecfaf946f7ab1f11139245d20 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Solver/ISolverImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Solver/ISolverImpl.cs new file mode 100644 index 00000000..fb40d70f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Solver/ISolverImpl.cs @@ -0,0 +1,64 @@ +using UnityEngine; + +namespace Obi +{ + public interface ISolverImpl + { + #region Lifecycle + void Destroy(); + #endregion + + #region Inertial Frame + void InitializeFrame(Vector4 translation, Vector4 scale, Quaternion rotation); + void UpdateFrame(Vector4 translation, Vector4 scale, Quaternion rotation, 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); + uint activeFoamParticleCount { get; } + #endregion + + #region Rigidbodies + void SetRigidbodyArrays(ObiSolver solver); + #endregion + + #region Constraints + IConstraintsBatchImpl CreateConstraintsBatch(Oni.ConstraintType type); + void DestroyConstraintsBatch(IConstraintsBatchImpl batch); + int GetConstraintCount(Oni.ConstraintType type); + void SetConstraintGroupParameters(Oni.ConstraintType type, ref Oni.ConstraintParameters parameters); + #endregion + + #region Update + 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 + void SetSimplices(ObiNativeIntList simplices, SimplexCounts counts); + #endregion + + #region Utils + void SetParameters(Oni.SolverParameters parameters); + void GetBounds(ref Vector3 min, ref Vector3 max); + int GetParticleGridSize(); + void GetParticleGrid(ObiNativeAabbList cells); + void SpatialQuery(ObiNativeQueryShapeList shapes, ObiNativeAffineTransformList transforms, ObiNativeQueryResultList results); + #endregion + + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Solver/ISolverImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Solver/ISolverImpl.cs.meta new file mode 100644 index 00000000..7f921dc2 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Interface/Solver/ISolverImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e99a50686df1a44519aa29d8424d670e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Null.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Null.meta new file mode 100644 index 00000000..423fa904 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Null.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3c5d200156f104097b803ba65cd0fe72 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Null/NullBackend.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Null/NullBackend.cs new file mode 100644 index 00000000..10cc2d69 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Null/NullBackend.cs @@ -0,0 +1,15 @@ +namespace Obi +{ + public class NullBackend : IObiBackend + { + #region Solver + public ISolverImpl CreateSolver(ObiSolver solver, int capacity) + { + return new NullSolverImpl(); + } + public void DestroySolver(ISolverImpl solver) + { + } + #endregion + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Null/NullBackend.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Null/NullBackend.cs.meta new file mode 100644 index 00000000..c1937b73 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Null/NullBackend.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 821d5c08bf0f9459698d65c3aaabaf54 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Null/NullSolverImpl.cs b/xiaofang/Assets/Obi/Scripts/Common/Backends/Null/NullSolverImpl.cs new file mode 100644 index 00000000..9e21824d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Null/NullSolverImpl.cs @@ -0,0 +1,134 @@ +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) + { + } + + public void UpdateFrame(Vector4 translation, Vector4 scale, Quaternion rotation, float deltaTime) + { + } + + public IObiJobHandle ApplyFrame(float worldLinearInertiaScale, float worldAngularInertiaScale, float deltaTime) + { + return null; + } + + public IObiJobHandle ApplyForceZones(ObiNativeForceZoneList zones, ObiNativeAffineTransformList transforms) + { + return null; + } + + public void SetDeformableTriangles(ObiNativeIntList indices, ObiNativeVector2List uvs) + { + + } + + public void SetDeformableEdges(ObiNativeIntList indices) + { + + } + + public void SetSimplices(ObiNativeIntList simplices, SimplexCounts counts) + { + } + + public void ParticleCountChanged(ObiSolver solver) + { + } + + public void MaxFoamParticleCountChanged(ObiSolver solver) + { + + } + + public void SetRigidbodyArrays(ObiSolver solver) + { + } + + public void SetActiveParticles(ObiNativeIntList indices) + { + } + + public void GetBounds(ref Vector3 min, ref Vector3 max) + { + } + + public void SetParameters(Oni.SolverParameters parameters) + { + } + + public int GetConstraintCount(Oni.ConstraintType type) + { + return 0; + } + + public void SetConstraintGroupParameters(Oni.ConstraintType type, ref Oni.ConstraintParameters parameters) + { + } + + public IConstraintsBatchImpl CreateConstraintsBatch(Oni.ConstraintType constraintType) + { + return null; + } + + public void DestroyConstraintsBatch(IConstraintsBatchImpl group) + { + } + + public void FinishSimulation() + { + + } + + public IObiJobHandle UpdateBounds(IObiJobHandle inputDeps, float stepTime) + { + return null; + } + + public IObiJobHandle CollisionDetection(IObiJobHandle inputDeps, float stepTime) + { + return null; + } + + public IObiJobHandle Substep(IObiJobHandle inputDeps, float stepTime, float substepTime, int index, float timeLeft) + { + return null; + } + + public IObiJobHandle ApplyInterpolation(IObiJobHandle inputDeps, ObiNativeVector4List startPositions, ObiNativeQuaternionList startOrientations, float stepTime, float unsimulatedTime) + { + return null; + } + + public int GetParticleGridSize() + { + return 0; + } + + public void GetParticleGrid(ObiNativeAabbList cells) + { + } + + public void SpatialQuery(ObiNativeQueryShapeList shapes, ObiNativeAffineTransformList transforms, ObiNativeQueryResultList results) + { + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Backends/Null/NullSolverImpl.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Backends/Null/NullSolverImpl.cs.meta new file mode 100644 index 00000000..4352d9f8 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Backends/Null/NullSolverImpl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f25a17b2fd1424dde851a7751e41d7b3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints.meta new file mode 100644 index 00000000..415cf4b2 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ce5ca5ebbe1f0418bb05de240bf6692c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints.meta new file mode 100644 index 00000000..60b71b4d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e272b09fdfb9d401aa0514e09d3eb842 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches.meta new file mode 100644 index 00000000..98445629 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 12f3679c3b69b41b68f65afab6db4c56 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/IStructuralConstraintBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/IStructuralConstraintBatch.cs new file mode 100644 index 00000000..66deaf90 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/IStructuralConstraintBatch.cs @@ -0,0 +1,13 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + + public interface IStructuralConstraintBatch + { + float GetRestLength(int index); + void SetRestLength(int index, float restLength); + ParticlePair GetParticleIndices(int index); + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/IStructuralConstraintBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/IStructuralConstraintBatch.cs.meta new file mode 100644 index 00000000..ab69460e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/IStructuralConstraintBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f23dea5b75e2c432282b0f62513267ed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiAerodynamicConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiAerodynamicConstraintsBatch.cs new file mode 100644 index 00000000..6e7c6c3b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiAerodynamicConstraintsBatch.cs @@ -0,0 +1,107 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System; + +namespace Obi +{ + [Serializable] + public class ObiAerodynamicConstraintsBatch : ObiConstraintsBatch + { + protected IAerodynamicConstraintsBatchImpl m_BatchImpl; + + /// + /// 3 floats per constraint: surface area, drag and lift. + /// + [HideInInspector] public ObiNativeFloatList aerodynamicCoeffs = new ObiNativeFloatList(); + + public override Oni.ConstraintType constraintType + { + get { return Oni.ConstraintType.Aerodynamics; } + } + + public override IConstraintsBatchImpl implementation + { + get { return m_BatchImpl; } + } + + public ObiAerodynamicConstraintsBatch(ObiAerodynamicConstraintsData constraints = null) : base() + { + } + + public void AddConstraint(int index, float area, float drag, float lift) + { + RegisterConstraint(); + + particleIndices.Add(index); + aerodynamicCoeffs.Add(area); + aerodynamicCoeffs.Add(drag); + aerodynamicCoeffs.Add(lift); + } + + public override void GetParticlesInvolved(int index, List particles) + { + particles.Add(particleIndices[index]); + } + + public override void Clear() + { + base.Clear(); + particleIndices.Clear(); + aerodynamicCoeffs.Clear(); + } + + protected override void SwapConstraints(int sourceIndex, int destIndex) + { + particleIndices.Swap(sourceIndex, destIndex); + aerodynamicCoeffs.Swap(sourceIndex * 3, destIndex * 3); + aerodynamicCoeffs.Swap(sourceIndex * 3 + 1, destIndex * 3 + 1); + aerodynamicCoeffs.Swap(sourceIndex * 3 + 2, destIndex * 3 + 2); + } + + public override void Merge(ObiActor actor, IObiConstraintsBatch other) + { + var batch = other as ObiAerodynamicConstraintsBatch; + var user = actor as IAerodynamicConstraintsUser; + + if (batch != null && user != null) + { + if (!user.aerodynamicsEnabled) + return; + + particleIndices.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + aerodynamicCoeffs.ResizeUninitialized((m_ActiveConstraintCount + batch.activeConstraintCount) * 3); + + for (int i = 0; i < batch.activeConstraintCount; ++i) + { + 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.GetDrag(batch, i); + aerodynamicCoeffs[(m_ActiveConstraintCount + i) * 3 + 2] = user.GetLift(batch, i); + } + + base.Merge(actor, other); + } + } + + public override void AddToSolver(ObiSolver solver) + { + // Create distance constraints batch directly. + m_BatchImpl = solver.implementation.CreateConstraintsBatch(constraintType) as IAerodynamicConstraintsBatchImpl; + + if (m_BatchImpl != null) + m_BatchImpl.SetAerodynamicConstraints(particleIndices, aerodynamicCoeffs, m_ActiveConstraintCount); + + } + + public override void RemoveFromSolver(ObiSolver solver) + { + base.RemoveFromSolver(solver); + + aerodynamicCoeffs.Dispose(); + + //Remove batch: + solver.implementation.DestroyConstraintsBatch(m_BatchImpl as IConstraintsBatchImpl); + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiAerodynamicConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiAerodynamicConstraintsBatch.cs.meta new file mode 100644 index 00000000..3fabfe16 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiAerodynamicConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 679cceabc60a345df8d9c3e0ac00eca3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8626b43f419d1466a9dc1c1509308b13, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendConstraintsBatch.cs new file mode 100644 index 00000000..a1cf3528 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendConstraintsBatch.cs @@ -0,0 +1,128 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System; + +namespace Obi +{ + [Serializable] + public class ObiBendConstraintsBatch : ObiConstraintsBatch + { + protected IBendConstraintsBatchImpl m_BatchImpl; + + /// + /// one float per constraint: the rest bend distance. + /// + [HideInInspector] public ObiNativeFloatList restBends = new ObiNativeFloatList(); + + /// + /// two floats per constraint: max bending and compliance. + /// + [HideInInspector] public ObiNativeVector2List bendingStiffnesses = new ObiNativeVector2List(); + + /// + /// two floats per constraint: plastic yield and creep. + /// + [HideInInspector] public ObiNativeVector2List plasticity = new ObiNativeVector2List(); + + public override Oni.ConstraintType constraintType + { + get { return Oni.ConstraintType.Bending; } + } + + public override IConstraintsBatchImpl implementation + { + get { return m_BatchImpl; } + } + + public ObiBendConstraintsBatch(ObiBendConstraintsData constraints = null) : base() + { + } + + public override void Merge(ObiActor actor, IObiConstraintsBatch other) + { + var batch = other as ObiBendConstraintsBatch; + var user = actor as IBendConstraintsUser; + + if (batch != null && user != null) + { + if (!user.bendConstraintsEnabled) + return; + + particleIndices.ResizeUninitialized((m_ActiveConstraintCount + batch.activeConstraintCount) * 3); + restBends.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + bendingStiffnesses.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + plasticity.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + lambdas.ResizeInitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + + restBends.CopyFrom(batch.restBends, 0, m_ActiveConstraintCount, batch.activeConstraintCount); + bendingStiffnesses.CopyReplicate(new Vector2(user.maxBending, user.bendCompliance), m_ActiveConstraintCount, batch.activeConstraintCount); + plasticity.CopyReplicate(new Vector2(user.plasticYield, user.plasticCreep), m_ActiveConstraintCount, batch.activeConstraintCount); + + for (int i = 0; i < batch.activeConstraintCount * 3; ++i) + particleIndices[m_ActiveConstraintCount * 3 + i] = actor.solverIndices[batch.particleIndices[i]]; + + base.Merge(actor, other); + } + } + + public void AddConstraint(Vector3Int indices, float restBend) + { + RegisterConstraint(); + + particleIndices.Add(indices[0]); + particleIndices.Add(indices[1]); + particleIndices.Add(indices[2]); + restBends.Add(restBend); + bendingStiffnesses.Add(Vector2.zero); + plasticity.Add(Vector2.zero); + } + + public override void Clear() + { + base.Clear(); + restBends.Clear(); + bendingStiffnesses.Clear(); + plasticity.Clear(); + } + + public override void GetParticlesInvolved(int index, List particles) + { + particles.Add(particleIndices[index * 3]); + particles.Add(particleIndices[index * 3 + 1]); + particles.Add(particleIndices[index * 3 + 2]); + } + + protected override void SwapConstraints(int sourceIndex, int destIndex) + { + particleIndices.Swap(sourceIndex * 3, destIndex * 3); + particleIndices.Swap(sourceIndex * 3 + 1 , destIndex * 3 + 1); + particleIndices.Swap(sourceIndex * 3 + 2, destIndex * 3 + 2); + restBends.Swap(sourceIndex, destIndex); + bendingStiffnesses.Swap(sourceIndex, destIndex); + plasticity.Swap(sourceIndex, destIndex); + } + + public override void AddToSolver(ObiSolver solver) + { + // Create distance constraints batch directly. + m_BatchImpl = solver.implementation.CreateConstraintsBatch(constraintType) as IBendConstraintsBatchImpl; + + if (m_BatchImpl != null) + m_BatchImpl.SetBendConstraints(particleIndices, restBends, bendingStiffnesses, plasticity, lambdas, m_ActiveConstraintCount); + + } + + 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/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendConstraintsBatch.cs.meta new file mode 100644 index 00000000..19f55f8d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d25c1516f81f44b190e2ef893151ea0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: f9aac3aba3ca7456d807e7fab120eb8a, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendTwistConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendTwistConstraintsBatch.cs new file mode 100644 index 00000000..522dd193 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendTwistConstraintsBatch.cs @@ -0,0 +1,129 @@ +using UnityEngine; +using System.Collections.Generic; +using System; + +namespace Obi +{ + [Serializable] + public class ObiBendTwistConstraintsBatch : ObiConstraintsBatch + { + protected IBendTwistConstraintsBatchImpl m_BatchImpl; + + /// + /// Rest darboux vector for each constraint. + /// + [HideInInspector] public ObiNativeQuaternionList restDarbouxVectors = new ObiNativeQuaternionList(); + + /// + /// 3 compliance values for each constraint, one for each local axis (x,y,z) + /// + [HideInInspector] public ObiNativeVector3List stiffnesses = new ObiNativeVector3List(); + + /// + /// two floats per constraint: plastic yield and creep. + /// + [HideInInspector] public ObiNativeVector2List plasticity = new ObiNativeVector2List(); + + public override Oni.ConstraintType constraintType + { + get { return Oni.ConstraintType.BendTwist; } + } + + public override IConstraintsBatchImpl implementation + { + get { return m_BatchImpl; } + } + + public ObiBendTwistConstraintsBatch(ObiBendTwistConstraintsData constraints = null) : base() + { + } + + public void AddConstraint(Vector2Int indices, Quaternion restDarboux) + { + RegisterConstraint(); + + this.particleIndices.Add(indices[0]); + this.particleIndices.Add(indices[1]); + this.restDarbouxVectors.Add(restDarboux); + this.stiffnesses.Add(Vector3.zero); + this.plasticity.Add(Vector2.zero); + } + + public override void Clear() + { + base.Clear(); + particleIndices.Clear(); + restDarbouxVectors.Clear(); + stiffnesses.Clear(); + plasticity.Clear(); + } + + public override void GetParticlesInvolved(int index, List particles) + { + particles.Add(particleIndices[index * 2]); + particles.Add(particleIndices[index * 2 + 1]); + } + + protected override void SwapConstraints(int sourceIndex, int destIndex) + { + particleIndices.Swap(sourceIndex * 2, destIndex * 2); + particleIndices.Swap(sourceIndex * 2 + 1, destIndex * 2 + 1); + restDarbouxVectors.Swap(sourceIndex, destIndex); + stiffnesses.Swap(sourceIndex, destIndex); + plasticity.Swap(sourceIndex, destIndex); + } + + public override void Merge(ObiActor actor, IObiConstraintsBatch other) + { + var batch = other as ObiBendTwistConstraintsBatch; + var user = actor as IBendTwistConstraintsUser; + + if (batch != null && user != null) + { + if (!user.bendTwistConstraintsEnabled) + return; + + particleIndices.ResizeUninitialized((m_ActiveConstraintCount + batch.activeConstraintCount) * 2); + restDarbouxVectors.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + stiffnesses.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + plasticity.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + lambdas.ResizeInitialized((m_ActiveConstraintCount + batch.activeConstraintCount) * 3); + + restDarbouxVectors.CopyFrom(batch.restDarbouxVectors, 0, m_ActiveConstraintCount, batch.activeConstraintCount); + + for (int i = 0; i < batch.activeConstraintCount; ++i) + { + stiffnesses[m_ActiveConstraintCount + i] = user.GetBendTwistCompliance(batch, i); + plasticity[m_ActiveConstraintCount + i] = user.GetBendTwistPlasticity(batch, i); + } + + for (int i = 0; i < batch.activeConstraintCount * 2; ++i) + particleIndices[m_ActiveConstraintCount * 2 + i] = actor.solverIndices[batch.particleIndices[i]]; + + base.Merge(actor, other); + } + } + + public override void AddToSolver(ObiSolver solver) + { + // Create distance constraints batch directly. + m_BatchImpl = solver.implementation.CreateConstraintsBatch(constraintType) as IBendTwistConstraintsBatchImpl; + + if (m_BatchImpl != null) + m_BatchImpl.SetBendTwistConstraints(particleIndices, restDarbouxVectors, stiffnesses, plasticity, lambdas, m_ActiveConstraintCount); + + } + + 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/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendTwistConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendTwistConstraintsBatch.cs.meta new file mode 100644 index 00000000..c4ab7a40 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendTwistConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fd870f7d936fb46178a58eed5f6d4f7e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 91de8d14a7b7a42d88d336323c428b20, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiChainConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiChainConstraintsBatch.cs new file mode 100644 index 00000000..1104490b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiChainConstraintsBatch.cs @@ -0,0 +1,133 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System; + +namespace Obi +{ + [Serializable] + public class ObiChainConstraintsBatch : ObiConstraintsBatch + { + protected IChainConstraintsBatchImpl m_BatchImpl; + + /// + /// index of the first particle for each constraint. + /// + [HideInInspector] public ObiNativeIntList firstParticle = new ObiNativeIntList(); + + /// + /// number of particles for each constraint. + /// + [HideInInspector] public ObiNativeIntList numParticles = new ObiNativeIntList(); + + /// + /// min/max lenghts for each constraint. + /// + [HideInInspector] public ObiNativeVector2List lengths = new ObiNativeVector2List(); + + public override Oni.ConstraintType constraintType + { + get { return Oni.ConstraintType.Chain; } + } + + public override IConstraintsBatchImpl implementation + { + get { return m_BatchImpl; } + } + + public ObiChainConstraintsBatch(ObiChainConstraintsData constraints = null) : base() + { + } + + public void AddConstraint(int[] indices, float restLength, float stretchStiffness, float compressionStiffness) + { + RegisterConstraint(); + + firstParticle.Add((int)particleIndices.count); + numParticles.Add((int)indices.Length); + particleIndices.AddRange(indices); + lengths.Add(new Vector2(restLength, restLength)); + } + + public override void Clear() + { + base.Clear(); + particleIndices.Clear(); + firstParticle.Clear(); + numParticles.Clear(); + lengths.Clear(); + } + + public override void GetParticlesInvolved(int index, List particles) + { + //TODO. + } + + protected override void SwapConstraints(int sourceIndex, int destIndex) + { + firstParticle.Swap(sourceIndex, destIndex); + numParticles.Swap(sourceIndex, destIndex); + lengths.Swap(sourceIndex, destIndex); + } + + public override void Merge(ObiActor actor, IObiConstraintsBatch other) + { + var batch = other as ObiChainConstraintsBatch; + var user = actor as IChainConstraintsUser; + + if (batch != null && user != null) + { + if (!user.chainConstraintsEnabled) + return; + + int initialIndexCount = particleIndices.count; + + int numActiveIndices = 0; + for (int i = 0; i < batch.activeConstraintCount; ++i) + numActiveIndices += batch.numParticles[i]; + + particleIndices.ResizeUninitialized(initialIndexCount + numActiveIndices); + firstParticle.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + numParticles.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + lengths.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + lambdas.ResizeInitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + + numParticles.CopyFrom(batch.numParticles, 0, m_ActiveConstraintCount, batch.activeConstraintCount); + + for (int i = 0; i < numActiveIndices; ++i) + particleIndices[initialIndexCount + i] = actor.solverIndices[batch.particleIndices[i]]; + + for (int i = 0; i < batch.activeConstraintCount; ++i) + { + firstParticle[m_ActiveConstraintCount + i] = batch.firstParticle[i] + initialIndexCount; + lengths[m_ActiveConstraintCount + i] = new Vector2(batch.lengths[i].y * user.tightness, batch.lengths[i].y); + } + + + base.Merge(actor, other); + } + } + + public override void AddToSolver(ObiSolver solver) + { + // Create distance constraints batch directly. + m_BatchImpl = solver.implementation.CreateConstraintsBatch(constraintType) as IChainConstraintsBatchImpl; + + if (m_BatchImpl != null) + m_BatchImpl.SetChainConstraints(particleIndices, lengths, firstParticle, numParticles, m_ActiveConstraintCount); + + } + + 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/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiChainConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiChainConstraintsBatch.cs.meta new file mode 100644 index 00000000..ae544fbb --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiChainConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4a957d8a661ad464085e9f64cfc57406 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 1a42905220c3544c99b3ec98f88b080b, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiConstraintsBatch.cs new file mode 100644 index 00000000..53c42dff --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiConstraintsBatch.cs @@ -0,0 +1,212 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + public interface IObiConstraintsBatch + { + int constraintCount + { + get; + } + + int activeConstraintCount + { + get; + set; + } + + int initialActiveConstraintCount + { + get; + set; + } + + Oni.ConstraintType constraintType + { + get; + } + + IConstraintsBatchImpl implementation + { + get; + } + + void AddToSolver(ObiSolver solver); + void RemoveFromSolver(ObiSolver solver); + + void Merge(ObiActor actor, IObiConstraintsBatch other); + + bool DeactivateConstraint(int constraintIndex); + bool ActivateConstraint(int constraintIndex); + void DeactivateAllConstraints(); + void ActivateAllConstraints(); + + void Clear(); + + void GetParticlesInvolved(int index, List particles); + void ParticlesSwapped(int index, int newIndex); + } + + public abstract class ObiConstraintsBatch : IObiConstraintsBatch + { + [HideInInspector] [SerializeField] protected List m_IDs = new List(); + [HideInInspector] [SerializeField] protected List m_IDToIndex = new List(); /**< maps from constraint ID to constraint index. When activating/deactivating constraints, their order changes. That makes this + map necessary. All active constraints are at the beginning of the constraint arrays, in the 0, activeConstraintCount index range.*/ + + [HideInInspector] [SerializeField] protected int m_ConstraintCount = 0; + [HideInInspector] [SerializeField] protected int m_ActiveConstraintCount = 0; + [HideInInspector] [SerializeField] protected int m_InitialActiveConstraintCount = 0; + + [HideInInspector] public ObiNativeIntList particleIndices = new ObiNativeIntList(); /**< particle indices, amount of them per constraint can be variable. */ + [HideInInspector] public ObiNativeFloatList lambdas = new ObiNativeFloatList(); /**< constraint lambdas */ + + public int constraintCount + { + get { return m_ConstraintCount; } + } + + public int activeConstraintCount + { + get { return m_ActiveConstraintCount; } + set { m_ActiveConstraintCount = value; } + } + + public virtual int initialActiveConstraintCount + { + get { return m_InitialActiveConstraintCount; } + set { m_InitialActiveConstraintCount = value; } + } + + public abstract Oni.ConstraintType constraintType + { + get; + } + + public abstract IConstraintsBatchImpl implementation + { + get; + } + + // Merges a batch from a given actor with this one. + public virtual void Merge(ObiActor actor, IObiConstraintsBatch other) + { + m_ConstraintCount += other.constraintCount; + m_ActiveConstraintCount += other.activeConstraintCount; + m_InitialActiveConstraintCount += other.initialActiveConstraintCount; + } + + + protected abstract void SwapConstraints(int sourceIndex, int destIndex); + public abstract void GetParticlesInvolved(int index, List particles); + + public virtual void AddToSolver(ObiSolver solver) { } + public virtual void RemoveFromSolver(ObiSolver solver) { + particleIndices.Dispose(); + lambdas.Dispose(); + } + + protected virtual void CopyConstraint(ObiConstraintsBatch batch, int constraintIndex) { } + + private void InnerSwapConstraints(int sourceIndex, int destIndex) + { + m_IDToIndex[m_IDs[sourceIndex]] = destIndex; + m_IDToIndex[m_IDs[destIndex]] = sourceIndex; + m_IDs.Swap(sourceIndex, destIndex); + SwapConstraints(sourceIndex, destIndex); + } + + /** + * Registers a new constraint. Call this before adding a new contraint to the batch, so that the constraint is given an ID + * and the amount of constraints increased. + */ + protected void RegisterConstraint() + { + m_IDs.Add(m_ConstraintCount); + m_IDToIndex.Add(m_ConstraintCount); + m_ConstraintCount++; + } + + public virtual void Clear() + { + m_ConstraintCount = 0; + m_ActiveConstraintCount = 0; + m_IDs.Clear(); + m_IDToIndex.Clear(); + particleIndices.Clear(); + lambdas.Clear(); + } + + /** + * Given the id of a constraint, return its index in the constraint data arrays. Will return -1 if the constraint does not exist. + */ + public int GetConstraintIndex(int constraintId) + { + if (constraintId < 0 || constraintId >= constraintCount) + return -1; + return m_IDToIndex[constraintId]; + } + + public bool IsConstraintActive(int index) + { + return index < m_ActiveConstraintCount; + } + + public bool ActivateConstraint(int constraintIndex) + { + if (constraintIndex < m_ActiveConstraintCount) + return false; + + InnerSwapConstraints(constraintIndex, m_ActiveConstraintCount); + m_ActiveConstraintCount++; + + return true; + } + + public bool DeactivateConstraint(int constraintIndex) + { + if (constraintIndex >= m_ActiveConstraintCount) + return false; + + m_ActiveConstraintCount--; + InnerSwapConstraints(constraintIndex, m_ActiveConstraintCount); + + return true; + } + + public void DeactivateAllConstraints() + { + 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) + { + SwapConstraints(constraintIndex, constraintCount - 1); + m_IDs.RemoveAt(constraintCount - 1); + m_IDToIndex.RemoveAt(constraintCount - 1); + + m_ConstraintCount--; + m_ActiveConstraintCount = Mathf.Min(m_ActiveConstraintCount, m_ConstraintCount); + } + + public void ParticlesSwapped(int index, int newIndex) + { + for (int i = 0; i < particleIndices.count; ++i) + { + if (particleIndices[i] == newIndex) + particleIndices[i] = index; + else if (particleIndices[i] == index) + particleIndices[i] = newIndex; + } + } + + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiConstraintsBatch.cs.meta new file mode 100644 index 00000000..46083e7c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7aacef50ee7794d0c9d6c77ef761d142 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiDistanceConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiDistanceConstraintsBatch.cs new file mode 100644 index 00000000..92673df9 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiDistanceConstraintsBatch.cs @@ -0,0 +1,148 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System; + +namespace Obi +{ + [Serializable] + public class ObiDistanceConstraintsBatch : ObiConstraintsBatch, IStructuralConstraintBatch + { + [NonSerialized] protected IDistanceConstraintsBatchImpl m_BatchImpl; + + /// + /// Rest distance for each individual constraint. + /// + [HideInInspector] public ObiNativeFloatList restLengths = new ObiNativeFloatList(); + + /// + /// 2 values for each constraint: compliance and slack. + /// + [HideInInspector] public ObiNativeVector2List stiffnesses = new ObiNativeVector2List(); + + public override Oni.ConstraintType constraintType + { + get { return Oni.ConstraintType.Distance; } + } + + public override IConstraintsBatchImpl implementation + { + get { return m_BatchImpl; } + } + + public ObiDistanceConstraintsBatch(ObiDistanceConstraintsData constraints = null) : base() + { + } + + public void AddConstraint(Vector2Int indices, float restLength) + { + RegisterConstraint(); + + particleIndices.Add(indices[0]); + particleIndices.Add(indices[1]); + restLengths.Add(restLength); + stiffnesses.Add(Vector2.zero); + } + + public override void Clear() + { + base.Clear(); + restLengths.Clear(); + stiffnesses.Clear(); + } + + public float GetRestLength(int index) + { + return restLengths[index]; + } + + public void SetRestLength(int index, float restLength) + { + restLengths[index] = restLength; + } + + public ParticlePair GetParticleIndices(int index) + { + return new ParticlePair(particleIndices[index * 2],particleIndices[index * 2 + 1]); + } + + public override void GetParticlesInvolved(int index, List particles) + { + particles.Add(particleIndices[index * 2]); + particles.Add(particleIndices[index * 2 + 1]); + } + + protected override void CopyConstraint(ObiConstraintsBatch batch, int constraintIndex) + { + if (batch is ObiDistanceConstraintsBatch) + { + var db = batch as ObiDistanceConstraintsBatch; + RegisterConstraint(); + particleIndices.Add(batch.particleIndices[constraintIndex * 2]); + particleIndices.Add(batch.particleIndices[constraintIndex * 2 + 1]); + restLengths.Add(db.restLengths[constraintIndex]); + stiffnesses.Add(db.stiffnesses[constraintIndex]); + ActivateConstraint(constraintCount - 1); + } + } + + protected override void SwapConstraints(int sourceIndex, int destIndex) + { + particleIndices.Swap(sourceIndex * 2, destIndex * 2); + particleIndices.Swap(sourceIndex * 2 + 1, destIndex * 2 + 1); + restLengths.Swap(sourceIndex, destIndex); + stiffnesses.Swap(sourceIndex, destIndex); + } + + public override void Merge(ObiActor actor, IObiConstraintsBatch other) + { + var batch = other as ObiDistanceConstraintsBatch; + var user = actor as IDistanceConstraintsUser; + + if (batch != null && user != null) + { + if (!user.distanceConstraintsEnabled) + return; + + particleIndices.ResizeUninitialized((m_ActiveConstraintCount + batch.activeConstraintCount) * 2); + restLengths.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + stiffnesses.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + lambdas.ResizeInitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + + for (int i = 0; i < batch.activeConstraintCount * 2; ++i) + particleIndices[m_ActiveConstraintCount * 2 + i] = actor.solverIndices[batch.particleIndices[i]]; + + for (int i = 0; i < batch.activeConstraintCount; ++i) + { + float restLength = batch.restLengths[i] * user.stretchingScale; + restLengths[m_ActiveConstraintCount + i] = restLength; // TODO: use nativelist methods? + stiffnesses[m_ActiveConstraintCount + i] = new Vector2(user.stretchCompliance, user.maxCompression * restLength); + } + + base.Merge(actor, other); + } + } + + public override void AddToSolver(ObiSolver solver) + { + // Create distance constraints batch directly. + m_BatchImpl = solver.implementation.CreateConstraintsBatch(constraintType) as IDistanceConstraintsBatchImpl; + + if (m_BatchImpl != null) + m_BatchImpl.SetDistanceConstraints(particleIndices, restLengths, stiffnesses, lambdas, m_ActiveConstraintCount); + + } + + 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/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiDistanceConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiDistanceConstraintsBatch.cs.meta new file mode 100644 index 00000000..69910bec --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiDistanceConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6b0df8a8dbd9143dca2d51705e597db4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8be685232a6ad41508d8bbe9d003a892, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinConstraintsBatch.cs new file mode 100644 index 00000000..a25aaa35 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinConstraintsBatch.cs @@ -0,0 +1,155 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + [Serializable] + public class ObiPinConstraintsBatch : ObiConstraintsBatch + { + protected IPinConstraintsBatchImpl m_BatchImpl; + + /// + /// for each constraint, handle of the pinned collider. + /// + [HideInInspector] public List pinBodies = new List(); + + /// + /// index of the pinned collider in the collider world. + /// + [HideInInspector] public ObiNativeIntList colliderIndices = new ObiNativeIntList(); + + /// + /// Pin position expressed in the attachment's local space. + /// + [HideInInspector] public ObiNativeVector4List offsets = new ObiNativeVector4List(); + + /// + /// Rest Darboux vector for each constraint. + /// + [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(); + + public override Oni.ConstraintType constraintType + { + get { return Oni.ConstraintType.Pin; } + } + + public override IConstraintsBatchImpl implementation + { + get { return m_BatchImpl; } + } + + public ObiPinConstraintsBatch(ObiPinConstraintsData constraints = null) : base() + { + } + + public void AddConstraint(int solverIndex, ObiColliderBase body, Vector3 offset, Quaternion restDarboux, float linearCompliance, float rotationalCompliance, float breakThreshold) + { + RegisterConstraint(); + + particleIndices.Add(solverIndex); + pinBodies.Add(body != null ? body.Handle : new ObiColliderHandle()); + colliderIndices.Add(body != null ? body.Handle.index : -1); + offsets.Add(offset); + restDarbouxVectors.Add(restDarboux); + stiffnesses.Add(linearCompliance); + stiffnesses.Add(rotationalCompliance); + breakThresholds.Add(breakThreshold); + } + + public override void Clear() + { + base.Clear(); + particleIndices.Clear(); + pinBodies.Clear(); + colliderIndices.Clear(); + offsets.Clear(); + restDarbouxVectors.Clear(); + stiffnesses.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); + restDarbouxVectors.Swap(sourceIndex, destIndex); + stiffnesses.Swap(sourceIndex * 2, destIndex * 2); + stiffnesses.Swap(sourceIndex * 2 + 1, destIndex * 2 + 1); + } + + public override void Merge(ObiActor actor, IObiConstraintsBatch other) + { + var batch = other as ObiPinConstraintsBatch; + + if (batch != null) + { + + particleIndices.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + + colliderIndices.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + 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) + { + particleIndices[m_ActiveConstraintCount + i] = batch.particleIndices[i]; + 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 IPinConstraintsBatchImpl; + + if (m_BatchImpl != null) + m_BatchImpl.SetPinConstraints(particleIndices, colliderIndices, offsets, restDarbouxVectors, stiffnesses, lambdas, m_ActiveConstraintCount); + } + } + + public override void RemoveFromSolver(ObiSolver solver) + { + base.RemoveFromSolver(solver); + + restDarbouxVectors.Dispose(); + colliderIndices.Dispose(); + offsets.Dispose(); + stiffnesses.Dispose(); + breakThresholds.Dispose(); + + if (solver != null && solver.implementation != null) + solver.implementation.DestroyConstraintsBatch(m_BatchImpl as IConstraintsBatchImpl); + } + + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinConstraintsBatch.cs.meta new file mode 100644 index 00000000..31c2122e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c2de2f97e7edf4bedb38202be59122ae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 85e4f507907784b9eb4637afe5c2e3a4, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiShapeMatchingConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiShapeMatchingConstraintsBatch.cs new file mode 100644 index 00000000..4c87bc32 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiShapeMatchingConstraintsBatch.cs @@ -0,0 +1,235 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System; + +namespace Obi +{ + [Serializable] + public class ObiShapeMatchingConstraintsBatch : ObiConstraintsBatch + { + protected IShapeMatchingConstraintsBatchImpl m_BatchImpl; + + /// + /// index of the first particle in each constraint. + /// + public ObiNativeIntList firstIndex = new ObiNativeIntList(); + + /// + /// amount of particles in each constraint. + /// + public ObiNativeIntList numIndices = new ObiNativeIntList(); + + /// + /// whether the constraint is implicit (0) or explicit (>0). + /// + public ObiNativeIntList explicitGroup = new ObiNativeIntList(); + + /// + /// 5 floats per constraint: stiffness, plastic yield, creep, recovery and max deformation. + /// + public ObiNativeFloatList materialParameters = new ObiNativeFloatList(); + + + /// + /// rest center of mass for each constraint. + /// + public ObiNativeVector4List restComs = new ObiNativeVector4List(); + + /// + /// current center of mass for each constraint. + /// + public ObiNativeVector4List coms = new ObiNativeVector4List(); + + /// + /// current best-match orientation for each constraint. + /// + public ObiNativeQuaternionList orientations = new ObiNativeQuaternionList(); + + /// + /// current best-match linear transform for each constraint. + /// + public ObiNativeMatrix4x4List linearTransforms = new ObiNativeMatrix4x4List(); + + /// + /// current plastic deformation for each constraint. + /// + public ObiNativeMatrix4x4List plasticDeformations = new ObiNativeMatrix4x4List(); + + + public override Oni.ConstraintType constraintType + { + get { return Oni.ConstraintType.ShapeMatching; } + } + + public override IConstraintsBatchImpl implementation + { + get { return m_BatchImpl; } + } + + public ObiShapeMatchingConstraintsBatch(ObiShapeMatchingConstraintsData constraints = null) : base() + { + } + + public void AddConstraint(int[] indices, bool isExplicit) + { + RegisterConstraint(); + + firstIndex.Add((int)particleIndices.count); + numIndices.Add((int)indices.Length); + explicitGroup.Add(isExplicit ? 1 : 0); + particleIndices.AddRange(indices); + materialParameters.AddRange(new float[] { 1, 1, 1, 1, 1 }); + } + + public override void Clear() + { + base.Clear(); + firstIndex.Clear(); + numIndices.Clear(); + explicitGroup.Clear(); + particleIndices.Clear(); + materialParameters.Clear(); + } + + public override void GetParticlesInvolved(int index, List particles) + { + int first = firstIndex[index]; + int num = numIndices[index]; + for (int i = first; i < first + num; ++i) + particles.Add(particleIndices[i]); + } + + public void RemoveParticleFromConstraint(int constraintIndex, int particleIndex) + { + int first = firstIndex[constraintIndex]; + int num = numIndices[constraintIndex]; + + int found = 0; + for (int i = first + num - 1; i >= first; --i) + { + if (particleIndices[i] == particleIndex) + { + found++; + particleIndices.RemoveAt(i); + } + } + + // update num indices of the current constraint: + numIndices[constraintIndex] -= found; + + // update firstIndex of following constraints: + for (int i = constraintIndex + 1; i < constraintCount; ++i) + firstIndex[i] -= found; + } + + protected override void SwapConstraints(int sourceIndex, int destIndex) + { + firstIndex.Swap(sourceIndex, destIndex); + numIndices.Swap(sourceIndex, destIndex); + explicitGroup.Swap(sourceIndex, destIndex); + + for (int i = 0; i < 5; ++i) + materialParameters.Swap(sourceIndex * 5 + i, destIndex * 5 + i); + + restComs.Swap(sourceIndex, destIndex); + coms.Swap(sourceIndex, destIndex); + orientations.Swap(sourceIndex, destIndex); + linearTransforms.Swap(sourceIndex, destIndex); + plasticDeformations.Swap(sourceIndex, destIndex); + } + + public override void Merge(ObiActor actor, IObiConstraintsBatch other) + { + var batch = other as ObiShapeMatchingConstraintsBatch; + var user = actor as IShapeMatchingConstraintsUser; + + if (batch != null && user != null) + { + if (!user.shapeMatchingConstraintsEnabled) + return; + + int initialIndexCount = particleIndices.count; + + // 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) + numActiveIndices += batch.numIndices[i]; + + particleIndices.ResizeUninitialized(initialIndexCount + numActiveIndices); + firstIndex.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + numIndices.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + explicitGroup.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + materialParameters.ResizeUninitialized((m_ActiveConstraintCount + batch.activeConstraintCount) * 5); + + restComs.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + coms.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + orientations.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + linearTransforms.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + plasticDeformations.ResizeInitialized(m_ActiveConstraintCount + batch.activeConstraintCount, Matrix4x4.identity); + + lambdas.ResizeInitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + + numIndices.CopyFrom(batch.numIndices, 0, m_ActiveConstraintCount, batch.activeConstraintCount); + explicitGroup.CopyFrom(batch.explicitGroup, 0, m_ActiveConstraintCount, batch.activeConstraintCount); + orientations.CopyReplicate(actor.actorLocalToSolverMatrix.rotation, m_ActiveConstraintCount, batch.activeConstraintCount); + + for (int i = 0; i < numActiveIndices; ++i) + particleIndices[initialIndexCount + i] = actor.solverIndices[batch.particleIndices[i]]; + + for (int i = 0; i < batch.activeConstraintCount; ++i) + { + firstIndex[m_ActiveConstraintCount + i] = batch.firstIndex[i] + initialIndexCount; + materialParameters[(m_ActiveConstraintCount + i) * 5] = batch.materialParameters[i * 5] * user.deformationResistance; + materialParameters[(m_ActiveConstraintCount + i) * 5 + 1] = batch.materialParameters[i * 5 + 1] * user.plasticYield; + materialParameters[(m_ActiveConstraintCount + i) * 5 + 2] = batch.materialParameters[i * 5 + 2] * user.plasticCreep; + materialParameters[(m_ActiveConstraintCount + i) * 5 + 3] = batch.materialParameters[i * 5 + 3] * user.plasticRecovery; + materialParameters[(m_ActiveConstraintCount + i) * 5 + 4] = batch.materialParameters[i * 5 + 4] * user.maxDeformation; + } + + base.Merge(actor, other); + } + } + + public override void AddToSolver(ObiSolver solver) + { + // Create distance constraints batch directly. + m_BatchImpl = solver.implementation.CreateConstraintsBatch(constraintType) as IShapeMatchingConstraintsBatchImpl; + + if (m_BatchImpl != null) + { + m_BatchImpl.SetShapeMatchingConstraints(particleIndices, firstIndex, numIndices, explicitGroup, + materialParameters, restComs, coms, orientations, linearTransforms, plasticDeformations, + lambdas, m_ActiveConstraintCount); + + m_BatchImpl.CalculateRestShapeMatching(); + } + } + + 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); + } + + public void RecalculateRestShapeMatching() + { + if (m_BatchImpl != null) + m_BatchImpl.CalculateRestShapeMatching(); + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiShapeMatchingConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiShapeMatchingConstraintsBatch.cs.meta new file mode 100644 index 00000000..4c7f8f60 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiShapeMatchingConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7b626d541fade4c159a4373343c8f0bd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: a2686776a1c104bfd8868f056a5cd335, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiSkinConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiSkinConstraintsBatch.cs new file mode 100644 index 00000000..f7b738cf --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiSkinConstraintsBatch.cs @@ -0,0 +1,146 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System; + +namespace Obi +{ + [Serializable] + public class ObiSkinConstraintsBatch : ObiConstraintsBatch + { + protected ISkinConstraintsBatchImpl m_BatchImpl; + + + /// + /// skin constraint anchor points, in solver space. + /// + [HideInInspector] public ObiNativeVector4List skinPoints = new ObiNativeVector4List(); + + /// + /// normal vector for each skin constraint, in solver space. + /// + [HideInInspector] public ObiNativeVector4List skinNormals = new ObiNativeVector4List(); + + /// + /// 3 floats per constraint: skin radius, backstop sphere radius, and backstop sphere distance. + /// + [HideInInspector] public ObiNativeFloatList skinRadiiBackstop = new ObiNativeFloatList(); + + /// + /// one compliance value per skin constraint. + /// + [HideInInspector] public ObiNativeFloatList skinCompliance = new ObiNativeFloatList(); + + public override Oni.ConstraintType constraintType + { + get { return Oni.ConstraintType.Skin; } + } + + public override IConstraintsBatchImpl implementation + { + get { return m_BatchImpl; } + } + + public ObiSkinConstraintsBatch(ObiSkinConstraintsData constraints = null) : base() + { + } + + public void AddConstraint(int index, Vector4 point, Vector4 normal, float radius, float collisionRadius, float backstop, float stiffness) + { + RegisterConstraint(); + + particleIndices.Add(index); + skinPoints.Add(point); + skinNormals.Add(normal); + skinRadiiBackstop.Add(radius); + skinRadiiBackstop.Add(collisionRadius); + skinRadiiBackstop.Add(backstop); + skinCompliance.Add(stiffness); + } + + public override void Clear() + { + base.Clear(); + particleIndices.Clear(); + skinPoints.Clear(); + skinNormals.Clear(); + skinRadiiBackstop.Clear(); + skinCompliance.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); + skinPoints.Swap(sourceIndex, destIndex); + skinNormals.Swap(sourceIndex, destIndex); + skinRadiiBackstop.Swap(sourceIndex * 3, destIndex * 3); + skinRadiiBackstop.Swap(sourceIndex * 3+1, destIndex * 3+1); + skinRadiiBackstop.Swap(sourceIndex * 3+2, destIndex * 3+2); + skinCompliance.Swap(sourceIndex, destIndex); + } + + public override void Merge(ObiActor actor, IObiConstraintsBatch other) + { + var batch = other as ObiSkinConstraintsBatch; + var user = actor as ISkinConstraintsUser; + + if (batch != null && user != null) + { + if (!user.skinConstraintsEnabled) + return; + + particleIndices.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + skinPoints.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + skinNormals.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + skinRadiiBackstop.ResizeUninitialized((m_ActiveConstraintCount + batch.activeConstraintCount) * 3); + skinCompliance.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + lambdas.ResizeInitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + + skinPoints.CopyFrom(batch.skinPoints, 0, m_ActiveConstraintCount, batch.activeConstraintCount); + skinNormals.CopyFrom(batch.skinNormals, 0, m_ActiveConstraintCount, batch.activeConstraintCount); + + for (int i = 0; i < batch.activeConstraintCount; ++i) + { + var radiiBackstop = user.GetSkinRadiiBackstop(batch, i); + skinRadiiBackstop[(m_ActiveConstraintCount + i) * 3] = radiiBackstop.x; + skinRadiiBackstop[(m_ActiveConstraintCount + i) * 3 + 1] = radiiBackstop.y; + skinRadiiBackstop[(m_ActiveConstraintCount + i) * 3 + 2] = radiiBackstop.z; + skinCompliance[m_ActiveConstraintCount + i] = user.GetSkinCompliance(batch, i); + } + + for (int i = 0; i < batch.activeConstraintCount; ++i) + particleIndices[m_ActiveConstraintCount + i] = actor.solverIndices[batch.particleIndices[i]]; + + base.Merge(actor, other); + } + } + + public override void AddToSolver(ObiSolver solver) + { + // Create distance constraints batch directly. + m_BatchImpl = solver.implementation.CreateConstraintsBatch(constraintType) as ISkinConstraintsBatchImpl; + + if (m_BatchImpl != null) + m_BatchImpl.SetSkinConstraints(particleIndices, skinPoints, skinNormals, skinRadiiBackstop, skinCompliance, lambdas, m_ActiveConstraintCount); + } + + 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/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiSkinConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiSkinConstraintsBatch.cs.meta new file mode 100644 index 00000000..bd0be667 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiSkinConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a7643c39396894308b222447b842c2b5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: e58e2a3c37c7547a8a791a56e0a1ace6, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiStretchShearConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiStretchShearConstraintsBatch.cs new file mode 100644 index 00000000..cce356d4 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiStretchShearConstraintsBatch.cs @@ -0,0 +1,156 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System; + +namespace Obi +{ + [Serializable] + public class ObiStretchShearConstraintsBatch : ObiConstraintsBatch, IStructuralConstraintBatch + { + protected IStretchShearConstraintsBatchImpl m_BatchImpl; + + /// + /// index of particle orientation for each constraint. + /// + [HideInInspector] public ObiNativeIntList orientationIndices = new ObiNativeIntList(); + + /// + /// rest distance for each constraint. + /// + [HideInInspector] public ObiNativeFloatList restLengths = new ObiNativeFloatList(); + + /// + /// rest orientation for each constraint. + /// + [HideInInspector] public ObiNativeQuaternionList restOrientations = new ObiNativeQuaternionList(); + + /// + /// 3 compliance values per constraint, one for each local axis (x,y,z). + /// + [HideInInspector] public ObiNativeVector3List stiffnesses = new ObiNativeVector3List(); + + public override Oni.ConstraintType constraintType + { + get { return Oni.ConstraintType.StretchShear; } + } + + public override IConstraintsBatchImpl implementation + { + get { return m_BatchImpl; } + } + + public ObiStretchShearConstraintsBatch(ObiStretchShearConstraintsData constraints = null) : base() + { + } + + public void AddConstraint(Vector2Int indices, int orientationIndex, float restLength, Quaternion restOrientation) + { + RegisterConstraint(); + + particleIndices.Add(indices[0]); + particleIndices.Add(indices[1]); + orientationIndices.Add(orientationIndex); + restLengths.Add(restLength); + restOrientations.Add(restOrientation); + stiffnesses.Add(Vector3.zero); + } + + public override void Clear() + { + base.Clear(); + particleIndices.Clear(); + orientationIndices.Clear(); + restLengths.Clear(); + restOrientations.Clear(); + stiffnesses.Clear(); + } + + public float GetRestLength(int index) + { + return restLengths[index]; + } + + public void SetRestLength(int index, float restLength) + { + restLengths[index] = restLength; + } + + public ParticlePair GetParticleIndices(int index) + { + return new ParticlePair(particleIndices[index * 2], particleIndices[index * 2 + 1]); + } + + public override void GetParticlesInvolved(int index, List particles) + { + particles.Add(particleIndices[index * 2]); + particles.Add(particleIndices[index * 2 + 1]); + } + + protected override void SwapConstraints(int sourceIndex, int destIndex) + { + particleIndices.Swap(sourceIndex * 2 , destIndex * 2); + particleIndices.Swap(sourceIndex * 2 + 1, destIndex * 2 + 1); + orientationIndices.Swap(sourceIndex, destIndex); + restLengths.Swap(sourceIndex, destIndex); + restOrientations.Swap(sourceIndex, destIndex); + stiffnesses.Swap(sourceIndex, destIndex); + } + + public override void Merge(ObiActor actor, IObiConstraintsBatch other) + { + var batch = other as ObiStretchShearConstraintsBatch; + var user = actor as IStretchShearConstraintsUser; + + if (batch != null && user != null) + { + if (!user.stretchShearConstraintsEnabled) + return; + + particleIndices.ResizeUninitialized((m_ActiveConstraintCount + batch.activeConstraintCount) * 2); + orientationIndices.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + restLengths.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + restOrientations.ResizeUninitialized(lambdas.count + batch.activeConstraintCount); + stiffnesses.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + lambdas.ResizeInitialized((m_ActiveConstraintCount + batch.activeConstraintCount) * 3); + + restLengths.CopyFrom(batch.restLengths, 0, m_ActiveConstraintCount, batch.activeConstraintCount); + restOrientations.CopyFrom(batch.restOrientations, 0, m_ActiveConstraintCount, batch.activeConstraintCount); + + for (int i = 0; i < batch.activeConstraintCount; ++i) + stiffnesses[m_ActiveConstraintCount + i] = user.GetStretchShearCompliance(batch, i); + + for (int i = 0; i < batch.activeConstraintCount * 2; ++i) + particleIndices[m_ActiveConstraintCount * 2 + i] = actor.solverIndices[batch.particleIndices[i]]; + + for (int i = 0; i < batch.activeConstraintCount; ++i) + orientationIndices[m_ActiveConstraintCount + i] = actor.solverIndices[batch.orientationIndices[i]]; + + base.Merge(actor, other); + } + } + + public override void AddToSolver(ObiSolver solver) + { + // Create distance constraints batch directly. + m_BatchImpl = solver.implementation.CreateConstraintsBatch(constraintType) as IStretchShearConstraintsBatchImpl; + + if (m_BatchImpl != null) + m_BatchImpl.SetStretchShearConstraints(particleIndices, orientationIndices, restLengths, restOrientations, stiffnesses, lambdas, m_ActiveConstraintCount); + } + + 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/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiStretchShearConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiStretchShearConstraintsBatch.cs.meta new file mode 100644 index 00000000..ea17106b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiStretchShearConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 915edc2d24cba477e8a942210f7ea8a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b3583331769a946aab1e4c59859547b2, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiTetherConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiTetherConstraintsBatch.cs new file mode 100644 index 00000000..313e6eca --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiTetherConstraintsBatch.cs @@ -0,0 +1,156 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System; + +namespace Obi +{ + [Serializable] + public class ObiTetherConstraintsBatch : ObiConstraintsBatch + { + protected ITetherConstraintsBatchImpl m_BatchImpl; + + /// + /// 2 floats per constraint: maximum length and tether scale. + /// + [HideInInspector] public ObiNativeVector2List maxLengthsScales = new ObiNativeVector2List(); + + /// + /// compliance value for each constraint. + /// + [HideInInspector] public ObiNativeFloatList stiffnesses = new ObiNativeFloatList(); + + public override Oni.ConstraintType constraintType + { + get { return Oni.ConstraintType.Tether; } + } + + public override IConstraintsBatchImpl implementation + { + get { return m_BatchImpl; } + } + + public ObiTetherConstraintsBatch(ObiTetherConstraintsData constraints = null) : base() + { + } + + public void AddConstraint(Vector2Int indices, float maxLength, float scale) + { + RegisterConstraint(); + + particleIndices.Add(indices[0]); + particleIndices.Add(indices[1]); + maxLengthsScales.Add(new Vector2(maxLength, scale)); + stiffnesses.Add(0); + } + + public override void Clear() + { + base.Clear(); + particleIndices.Clear(); + maxLengthsScales.Clear(); + stiffnesses.Clear(); + } + + public override void GetParticlesInvolved(int index, List particles) + { + particles.Add(particleIndices[index * 2]); + particles.Add(particleIndices[index * 2 + 1]); + } + + protected override void SwapConstraints(int sourceIndex, int destIndex) + { + particleIndices.Swap(sourceIndex * 2, destIndex * 2); + particleIndices.Swap(sourceIndex * 2 + 1, destIndex * 2 + 1); + maxLengthsScales.Swap(sourceIndex, destIndex); + stiffnesses.Swap(sourceIndex, destIndex); + } + + public override void Merge(ObiActor actor, IObiConstraintsBatch other) + { + var batch = other as ObiTetherConstraintsBatch; + var user = actor as ITetherConstraintsUser; + + if (batch != null && user != null) + { + if (!user.tetherConstraintsEnabled) + return; + + particleIndices.ResizeUninitialized((m_ActiveConstraintCount + batch.activeConstraintCount) * 2); + maxLengthsScales.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + stiffnesses.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + lambdas.ResizeInitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + + stiffnesses.CopyReplicate(user.tetherCompliance, m_ActiveConstraintCount, batch.activeConstraintCount); + + for (int i = 0; i < batch.activeConstraintCount * 2; ++i) + particleIndices[m_ActiveConstraintCount * 2 + i] = actor.solverIndices[batch.particleIndices[i]]; + + for (int i = 0; i < batch.activeConstraintCount; ++i) + maxLengthsScales[m_ActiveConstraintCount + i] = new Vector2(batch.maxLengthsScales[i].x, user.tetherScale); + + base.Merge(actor, other); + } + } + + public override void AddToSolver(ObiSolver solver) + { + // Create distance constraints batch directly. + m_BatchImpl = solver.implementation.CreateConstraintsBatch(constraintType) as ITetherConstraintsBatchImpl; + + if (m_BatchImpl != null) + m_BatchImpl.SetTetherConstraints(particleIndices, maxLengthsScales, stiffnesses, lambdas, m_ActiveConstraintCount); + } + + public override void RemoveFromSolver(ObiSolver solver) + { + base.RemoveFromSolver(solver); + + maxLengthsScales.Dispose(); + stiffnesses.Dispose(); + + //Remove batch: + solver.implementation.DestroyConstraintsBatch(m_BatchImpl as IConstraintsBatchImpl); + } + + /*public override void AddToSolver(ObiSolver solver) + { + // create and add the implementation: + if (m_Constraints != null && m_Constraints.implementation != null) + { + m_BatchImpl = m_Constraints.implementation.CreateConstraintsBatch(); + } + + if (m_BatchImpl != null) + { + lambdas.Clear(); + for (int i = 0; i < stiffnesses.count; i++) + { + //particleIndices[i * 2] = constraints.GetActor().solverIndices[m_Source.particleIndices[i * 2]]; + //particleIndices[i * 2 + 1] = constraints.GetActor().solverIndices[m_Source.particleIndices[i * 2 + 1]]; + lambdas.Add(0); + } + + m_BatchImpl.SetTetherConstraints(particleIndices, maxLengthsScales, stiffnesses, lambdas, m_ConstraintCount); + m_BatchImpl.SetActiveConstraints(m_ActiveConstraintCount); + } + + } + + public override void RemoveFromSolver(ObiSolver solver) + { + if (m_Constraints != null && m_Constraints.implementation != null) + m_Constraints.implementation.RemoveBatch(m_BatchImpl); + }*/ + + public void SetParameters(float compliance, float scale) + { + for (int i = 0; i < stiffnesses.count; i++) + { + stiffnesses[i] = compliance; + maxLengthsScales[i] = new Vector2(maxLengthsScales[i].x, scale); + } + } + + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiTetherConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiTetherConstraintsBatch.cs.meta new file mode 100644 index 00000000..ebed69f8 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiTetherConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6cf16f1dcc0c34dbd816110ce4b29ed9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 45a4a839cd07d49f698be261ce71ee3c, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiVolumeConstraintsBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiVolumeConstraintsBatch.cs new file mode 100644 index 00000000..882f1a77 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiVolumeConstraintsBatch.cs @@ -0,0 +1,147 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System; + +namespace Obi +{ + [Serializable] + public class ObiVolumeConstraintsBatch : ObiConstraintsBatch + { + protected IVolumeConstraintsBatchImpl m_BatchImpl; + + /// + /// index of the first triangle for each constraint (exclusive prefix sum). + /// + [HideInInspector] public ObiNativeIntList firstTriangle = new ObiNativeIntList(); + + /// + /// number of triangles for each constraint. + /// + [HideInInspector] public ObiNativeIntList numTriangles = new ObiNativeIntList(); + + /// + /// rest volume for each constraint. + /// + [HideInInspector] public ObiNativeFloatList restVolumes = new ObiNativeFloatList(); + + /// + /// 2 floats per constraint: pressure and stiffness. + /// + [HideInInspector] public ObiNativeVector2List pressureStiffness = new ObiNativeVector2List(); + + public override Oni.ConstraintType constraintType + { + get { return Oni.ConstraintType.Volume; } + } + + public override IConstraintsBatchImpl implementation + { + get { return m_BatchImpl; } + } + + public ObiVolumeConstraintsBatch(ObiVolumeConstraintsData constraints = null) : base() + { + } + + public void AddConstraint(int[] triangles, float restVolume) + { + RegisterConstraint(); + + firstTriangle.Add((int)particleIndices.count / 3); + numTriangles.Add((int)triangles.Length / 3); + restVolumes.Add(restVolume); + pressureStiffness.Add(new Vector2(1,0)); + particleIndices.AddRange(triangles); + } + + public override void Clear() + { + base.Clear(); + particleIndices.Clear(); + firstTriangle.Clear(); + numTriangles.Clear(); + restVolumes.Clear(); + pressureStiffness.Clear(); + } + + public override void GetParticlesInvolved(int index, List particles) + { + //TODO. + } + + protected override void SwapConstraints(int sourceIndex, int destIndex) + { + firstTriangle.Swap(sourceIndex, destIndex); + numTriangles.Swap(sourceIndex, destIndex); + restVolumes.Swap(sourceIndex, destIndex); + pressureStiffness.Swap(sourceIndex, destIndex); + } + + public override void Merge(ObiActor actor, IObiConstraintsBatch other) + { + var batch = other as ObiVolumeConstraintsBatch; + var user = actor as IVolumeConstraintsUser; + + if (batch != null && user != null) + { + if (!user.volumeConstraintsEnabled) + return; + + int initialIndexCount = particleIndices.count; + + int numActiveTriangles = 0; + for (int i = 0; i < batch.constraintCount; ++i) + numActiveTriangles += batch.numTriangles[i]; + + particleIndices.ResizeUninitialized(initialIndexCount + numActiveTriangles * 3); + firstTriangle.ResizeUninitialized(firstTriangle.count + batch.activeConstraintCount); + numTriangles.ResizeUninitialized(numTriangles.count + batch.activeConstraintCount); + restVolumes.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + pressureStiffness.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + lambdas.ResizeInitialized(m_ActiveConstraintCount + batch.activeConstraintCount); + + numTriangles.CopyFrom(batch.numTriangles, 0, m_ActiveConstraintCount, batch.activeConstraintCount); + restVolumes.CopyFrom(batch.restVolumes, 0, m_ActiveConstraintCount, batch.activeConstraintCount); + pressureStiffness.CopyReplicate(new Vector2(user.pressure, user.compressionCompliance), m_ActiveConstraintCount, batch.activeConstraintCount); + + for (int i = 0; i < numActiveTriangles * 3; ++i) + particleIndices[initialIndexCount + i] = actor.solverIndices[batch.particleIndices[i]]; + + for (int i = 0; i < batch.activeConstraintCount + 1; ++i) + firstTriangle[m_ActiveConstraintCount + i] = initialIndexCount/3 + batch.firstTriangle[i]; + + base.Merge(actor, other); + } + } + + public override void AddToSolver(ObiSolver solver) + { + // Create distance constraints batch directly. + m_BatchImpl = solver.implementation.CreateConstraintsBatch(constraintType) as IVolumeConstraintsBatchImpl; + + if (m_BatchImpl != null) + m_BatchImpl.SetVolumeConstraints(particleIndices, firstTriangle, numTriangles, restVolumes, pressureStiffness, lambdas, m_ActiveConstraintCount); + } + + 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); + } + + public void SetParameters(float compliance, float pressure) + { + Vector2 p = new Vector2(pressure, compliance); + for (int i = 0; i < pressureStiffness.count; i++) + pressureStiffness[i] = p; + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiVolumeConstraintsBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiVolumeConstraintsBatch.cs.meta new file mode 100644 index 00000000..cd298e6e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiVolumeConstraintsBatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38adc52900fa64209829b6db86f4fd40 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: d9d3ddf824bd449e5b405439ee034b12, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups.meta new file mode 100644 index 00000000..9c61b7fc --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a4c68760109fb4c9a9fe6cd000123940 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiAerodynamicConstraintsData.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiAerodynamicConstraintsData.cs new file mode 100644 index 00000000..96657c00 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiAerodynamicConstraintsData.cs @@ -0,0 +1,28 @@ +using UnityEngine; +using System.Collections; +using System; + +namespace Obi +{ + + public interface IAerodynamicConstraintsUser + { + bool aerodynamicsEnabled + { + get; + set; + } + + float GetDrag(ObiAerodynamicConstraintsBatch batch, int constraintIndex); + float GetLift(ObiAerodynamicConstraintsBatch batch, int constraintIndex); + } + + [Serializable] + public class ObiAerodynamicConstraintsData : ObiConstraints + { + public override ObiAerodynamicConstraintsBatch CreateBatch(ObiAerodynamicConstraintsBatch source = null) + { + return new ObiAerodynamicConstraintsBatch(); + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiAerodynamicConstraintsData.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiAerodynamicConstraintsData.cs.meta new file mode 100644 index 00000000..98ac57b3 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiAerodynamicConstraintsData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f82b39fc2deaa46d9bbec616c2e7aaf5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendConstraintsData.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendConstraintsData.cs new file mode 100644 index 00000000..dfed54a5 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendConstraintsData.cs @@ -0,0 +1,49 @@ +using UnityEngine; +using System.Collections; +using System; + +namespace Obi +{ + public interface IBendConstraintsUser + { + bool bendConstraintsEnabled + { + get; + set; + } + + float bendCompliance + { + get; + set; + } + + float maxBending + { + get; + set; + } + + float plasticYield + { + get; + set; + } + + float plasticCreep + { + get; + set; + } + + } + + [Serializable] + public class ObiBendConstraintsData : ObiConstraints + { + public override ObiBendConstraintsBatch CreateBatch(ObiBendConstraintsBatch source = null) + { + return new ObiBendConstraintsBatch(); + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendConstraintsData.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendConstraintsData.cs.meta new file mode 100644 index 00000000..02b7052b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendConstraintsData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b1c1bcd52cdf746fc8f62059ba5bb9e9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendTwistConstraintsData.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendTwistConstraintsData.cs new file mode 100644 index 00000000..36d4709c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendTwistConstraintsData.cs @@ -0,0 +1,28 @@ +using UnityEngine; +using System; + +namespace Obi +{ + + public interface IBendTwistConstraintsUser + { + bool bendTwistConstraintsEnabled + { + get; + set; + } + + Vector3 GetBendTwistCompliance(ObiBendTwistConstraintsBatch batch, int constraintIndex); + Vector2 GetBendTwistPlasticity(ObiBendTwistConstraintsBatch batch, int constraintIndex); + } + + [Serializable] + public class ObiBendTwistConstraintsData : ObiConstraints + { + + public override ObiBendTwistConstraintsBatch CreateBatch(ObiBendTwistConstraintsBatch source = null) + { + return new ObiBendTwistConstraintsBatch(); + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendTwistConstraintsData.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendTwistConstraintsData.cs.meta new file mode 100644 index 00000000..eb547ee1 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendTwistConstraintsData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e2e8e3c3251694dcfbb9aabbd5ed1a4a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiChainConstraintsData.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiChainConstraintsData.cs new file mode 100644 index 00000000..7a09a7ba --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiChainConstraintsData.cs @@ -0,0 +1,32 @@ +using UnityEngine; +using System.Collections; +using System; + +namespace Obi +{ + + public interface IChainConstraintsUser + { + + bool chainConstraintsEnabled + { + get; + set; + } + + float tightness + { + get; + set; + } + } + + [Serializable] + public class ObiChainConstraintsData : ObiConstraints + { + public override ObiChainConstraintsBatch CreateBatch(ObiChainConstraintsBatch source = null) + { + return new ObiChainConstraintsBatch(); + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiChainConstraintsData.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiChainConstraintsData.cs.meta new file mode 100644 index 00000000..75868c48 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiChainConstraintsData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 33365683dad7c4ad395bce89c5381081 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiDistanceConstraintsData.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiDistanceConstraintsData.cs new file mode 100644 index 00000000..11f175d9 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiDistanceConstraintsData.cs @@ -0,0 +1,43 @@ +using UnityEngine; +using System.Collections; +using System; + +namespace Obi +{ + public interface IDistanceConstraintsUser + { + bool distanceConstraintsEnabled + { + get; + set; + } + + float stretchingScale + { + get; + set; + } + + float stretchCompliance + { + get; + set; + } + + float maxCompression + { + get; + set; + } + } + + [Serializable] + public class ObiDistanceConstraintsData : ObiConstraints + { + + public override ObiDistanceConstraintsBatch CreateBatch(ObiDistanceConstraintsBatch source = null) + { + return new ObiDistanceConstraintsBatch(); + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiDistanceConstraintsData.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiDistanceConstraintsData.cs.meta new file mode 100644 index 00000000..a5723c0c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiDistanceConstraintsData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 782174d96bf484b98b0dbb103eeb2d1c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinConstraintsData.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinConstraintsData.cs new file mode 100644 index 00000000..0b1201a6 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinConstraintsData.cs @@ -0,0 +1,16 @@ +using UnityEngine; +using System.Collections; +using System; + +namespace Obi +{ + [Serializable] + public class ObiPinConstraintsData : ObiConstraints + { + + public override ObiPinConstraintsBatch CreateBatch(ObiPinConstraintsBatch source = null) + { + return new ObiPinConstraintsBatch(); + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinConstraintsData.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinConstraintsData.cs.meta new file mode 100644 index 00000000..593e4790 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinConstraintsData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b7a2147b44dc24d59a5b57314325ae6c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiShapeMatchingConstraintsData.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiShapeMatchingConstraintsData.cs new file mode 100644 index 00000000..69e4f3ec --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiShapeMatchingConstraintsData.cs @@ -0,0 +1,55 @@ +using UnityEngine; +using System.Collections; +using System; + +namespace Obi +{ + + public interface IShapeMatchingConstraintsUser + { + bool shapeMatchingConstraintsEnabled + { + get; + set; + } + + float deformationResistance + { + get; + set; + } + + float maxDeformation + { + get; + set; + } + + float plasticYield + { + get; + set; + } + + float plasticCreep + { + get; + set; + } + + float plasticRecovery + { + get; + set; + } + } + + [Serializable] + public class ObiShapeMatchingConstraintsData : ObiConstraints + { + public override ObiShapeMatchingConstraintsBatch CreateBatch(ObiShapeMatchingConstraintsBatch source = null) + { + return new ObiShapeMatchingConstraintsBatch(); + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiShapeMatchingConstraintsData.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiShapeMatchingConstraintsData.cs.meta new file mode 100644 index 00000000..9476adec --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiShapeMatchingConstraintsData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d275158a9006411cb1a69f84653efcb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiSkinConstraintsData.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiSkinConstraintsData.cs new file mode 100644 index 00000000..4beddc7b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiSkinConstraintsData.cs @@ -0,0 +1,26 @@ +using UnityEngine; +using System; + +namespace Obi +{ + public interface ISkinConstraintsUser + { + bool skinConstraintsEnabled + { + get; + set; + } + + Vector3 GetSkinRadiiBackstop(ObiSkinConstraintsBatch batch, int constraintIndex); + float GetSkinCompliance(ObiSkinConstraintsBatch batch, int constraintIndex); + } + + [Serializable] + public class ObiSkinConstraintsData : ObiConstraints + { + public override ObiSkinConstraintsBatch CreateBatch(ObiSkinConstraintsBatch source = null) + { + return new ObiSkinConstraintsBatch(); + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiSkinConstraintsData.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiSkinConstraintsData.cs.meta new file mode 100644 index 00000000..45d605e9 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiSkinConstraintsData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0bb567aa0489c4b38bf7e6f9b43d953f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiStretchShearConstraintsData.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiStretchShearConstraintsData.cs new file mode 100644 index 00000000..54db995b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiStretchShearConstraintsData.cs @@ -0,0 +1,28 @@ +using UnityEngine; +using System.Collections; +using System; + +namespace Obi +{ + + public interface IStretchShearConstraintsUser + { + bool stretchShearConstraintsEnabled + { + get; + set; + } + + Vector3 GetStretchShearCompliance(ObiStretchShearConstraintsBatch batch, int constraintIndex); + } + + [Serializable] + public class ObiStretchShearConstraintsData : ObiConstraints + { + + public override ObiStretchShearConstraintsBatch CreateBatch(ObiStretchShearConstraintsBatch source = null) + { + return new ObiStretchShearConstraintsBatch(); + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiStretchShearConstraintsData.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiStretchShearConstraintsData.cs.meta new file mode 100644 index 00000000..825e8e61 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiStretchShearConstraintsData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f8ae3ab8eafd74991858032375e5444f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiTetherConstraintsData.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiTetherConstraintsData.cs new file mode 100644 index 00000000..a0269d98 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiTetherConstraintsData.cs @@ -0,0 +1,38 @@ +using UnityEngine; +using System.Collections; +using System; + +namespace Obi +{ + + public interface ITetherConstraintsUser + { + bool tetherConstraintsEnabled + { + get; + set; + } + + float tetherCompliance + { + get; + set; + } + + float tetherScale + { + get; + set; + } + } + + + [Serializable] + public class ObiTetherConstraintsData : ObiConstraints + { + public override ObiTetherConstraintsBatch CreateBatch(ObiTetherConstraintsBatch source = null) + { + return new ObiTetherConstraintsBatch(); + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiTetherConstraintsData.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiTetherConstraintsData.cs.meta new file mode 100644 index 00000000..7e7cbcbe --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiTetherConstraintsData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 10997226d34c34554a17c69f27627e5d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiVolumeConstraintsData.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiVolumeConstraintsData.cs new file mode 100644 index 00000000..3b76209b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiVolumeConstraintsData.cs @@ -0,0 +1,37 @@ +using UnityEngine; +using System.Collections; +using System; + +namespace Obi +{ + + public interface IVolumeConstraintsUser + { + bool volumeConstraintsEnabled + { + get; + set; + } + + float compressionCompliance + { + get; + set; + } + + float pressure + { + get; + set; + } + } + + [Serializable] + public class ObiVolumeConstraintsData : ObiConstraints + { + public override ObiVolumeConstraintsBatch CreateBatch(ObiVolumeConstraintsBatch source = null) + { + return new ObiVolumeConstraintsBatch(); + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiVolumeConstraintsData.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiVolumeConstraintsData.cs.meta new file mode 100644 index 00000000..559f0d83 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiVolumeConstraintsData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 55945e863f03047c18b48088708c2935 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/ObiConstraints.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/ObiConstraints.cs new file mode 100644 index 00000000..b8810adc --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/ObiConstraints.cs @@ -0,0 +1,178 @@ +using UnityEngine; +using System.Collections.Generic; +using System; + +namespace Obi +{ + public interface IObiConstraints + { + Oni.ConstraintType? GetConstraintType(); + + IObiConstraintsBatch GetBatch(int i); + int batchCount { get; } + void Clear(); + + bool AddToSolver(ObiSolver solver); + bool RemoveFromSolver(); + + int GetConstraintCount(); + int GetActiveConstraintCount(); + void ActivateAllConstraints(); + void DeactivateAllConstraints(); + + void Merge(ObiActor actor, IObiConstraints other); + } + + [Serializable] + public abstract class ObiConstraints : IObiConstraints where T : class, IObiConstraintsBatch + { + [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) + { + var others = other as ObiConstraints; + + if (others == null || !other.GetConstraintType().HasValue) + return; + + int constraintType = (int)other.GetConstraintType().Value; + + // clear batch offsets for this constraint type: + actor.solverBatchOffsets[constraintType].Clear(); + + // create new empty batches if needed: + int newBatches = Mathf.Max(0, others.batchCount - batchCount); + for (int i = 0; i < newBatches; ++i) + AddBatch(CreateBatch()); + + for (int i = 0; i < other.batchCount; ++i) + { + // store this batch's offset: + actor.solverBatchOffsets[constraintType].Add(batches[i].activeConstraintCount); + + // merge both batches: + batches[i].Merge(actor, others.batches[i]); + } + + } + + public IObiConstraintsBatch GetBatch(int i) + { + if (batches != null && i >= 0 && i < batches.Count) + return (IObiConstraintsBatch) batches[i]; + return null; + } + + public int GetConstraintCount() + { + int count = 0; + if (batches == null) return count; + + foreach (T batch in batches) + if (batch != null) + count += batch.constraintCount; + + return count; + } + + public int GetActiveConstraintCount() + { + int count = 0; + if (batches == null) return count; + + foreach (T batch in batches) + if (batch != null) + count += batch.activeConstraintCount; + + return count; + } + + public void DeactivateAllConstraints() + { + if (batches != null) + foreach (T batch in batches) + if (batch != null) + 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; + } + + public Oni.ConstraintType? GetConstraintType() + { + if (batches != null && batches.Count > 0) + return batches[0].constraintType; + else return null; + } + + public void Clear() + { + RemoveFromSolver(); + + if (batches != null) + batches.Clear(); + } + + public virtual T CreateBatch(T source = null) + { + return null; + } + + public void AddBatch(T batch) + { + if (batch != null) + batches.Add(batch); + } + + public bool RemoveBatch(T batch) + { + if (batches == null || batch == null) + return false; + return batches.Remove(batch); + } + + public bool AddToSolver(ObiSolver solver) + { + + if (this.m_Solver != null || batches == null) + return false; + + this.m_Solver = solver; + + foreach (T batch in batches) + batch.AddToSolver(m_Solver); + + return true; + + } + + public bool RemoveFromSolver() + { + + if (this.m_Solver == null || batches == null) + return false; + + foreach (T batch in batches) + batch.RemoveFromSolver(m_Solver); + + this.m_Solver = null; + + return true; + + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/ObiConstraints.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/ObiConstraints.cs.meta new file mode 100644 index 00000000..53ddd38c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/ObiConstraints.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ef958cf590b69495999edd2bbdd290f7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/StructuralConstraint.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/StructuralConstraint.cs new file mode 100644 index 00000000..927e99ac --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/StructuralConstraint.cs @@ -0,0 +1,37 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public struct StructuralConstraint + { + public IStructuralConstraintBatch batchIndex; + public int constraintIndex; + public float force; + + public float restLength + { + get + { + if (batchIndex == null) + return -1; + return batchIndex.GetRestLength(constraintIndex); + } + + set + { + if (batchIndex != null) + { + batchIndex.SetRestLength(constraintIndex, value); + } + } + } + + public StructuralConstraint(IStructuralConstraintBatch batchIndex, int constraintIndex, float force) + { + this.batchIndex = batchIndex; + this.constraintIndex = constraintIndex; + this.force = force; + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/StructuralConstraint.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/StructuralConstraint.cs.meta new file mode 100644 index 00000000..0d46eb5e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/Constraints/StructuralConstraint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 553bc976d8dc04e3fa4a38926a713231 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/GraphColoring.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/GraphColoring.cs new file mode 100644 index 00000000..3101bf7b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/GraphColoring.cs @@ -0,0 +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; if (i % 250 == 0) yield return new CoroutineJob.ProgressInfo(progressDescription, i / (float)constraintCount); } } } } \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/GraphColoring.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/GraphColoring.cs.meta new file mode 100644 index 00000000..ff881130 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/GraphColoring.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9fd5c54becb84484b9b524f897fa9f23 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/ObiActorBlueprint.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/ObiActorBlueprint.cs new file mode 100644 index 00000000..c87f69db --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/ObiActorBlueprint.cs @@ -0,0 +1,702 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Serialization; +using System.IO; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace Obi +{ + + public abstract class ObiActorBlueprint : ScriptableObject, IObiParticleCollection + { + 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(); + + /**Particle components*/ + [HideInInspector] public Vector3[] positions = null; /**< Particle positions.*/ + [HideInInspector] public Vector4[] restPositions = null; /**< Particle rest positions, used to filter collisions.*/ + + [HideInInspector] public Quaternion[] orientations = null; /**< Particle orientations.*/ + [HideInInspector] public Quaternion[] restOrientations = null; /**< Particle rest orientations.*/ + + [HideInInspector] public Vector3[] velocities = null; /**< Particle velocities.*/ + [HideInInspector] public Vector3[] angularVelocities = null; /**< Particle angular velocities.*/ + + [HideInInspector] public float[] invMasses = null; /**< Particle inverse masses*/ + [HideInInspector] public float[] invRotationalMasses = null; + + [FormerlySerializedAs("phases")] + [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)*/ + + /** Simplices **/ + [HideInInspector] public int[] points = null; + [HideInInspector] public int[] edges = null; + [HideInInspector] public int[] triangles = null; + + /** Constraint components. Each constraint type contains a list of constraint batches.*/ + [HideInInspector] public ObiDistanceConstraintsData distanceConstraintsData = null; + [HideInInspector] public ObiBendConstraintsData bendConstraintsData = null; + [HideInInspector] public ObiSkinConstraintsData skinConstraintsData = null; + [HideInInspector] public ObiTetherConstraintsData tetherConstraintsData = null; + [HideInInspector] public ObiStretchShearConstraintsData stretchShearConstraintsData = null; + [HideInInspector] public ObiBendTwistConstraintsData bendTwistConstraintsData = null; + [HideInInspector] public ObiShapeMatchingConstraintsData shapeMatchingConstraintsData = null; + [HideInInspector] public ObiAerodynamicConstraintsData aerodynamicConstraintsData = null; + [HideInInspector] public ObiChainConstraintsData chainConstraintsData = null; + [HideInInspector] public ObiVolumeConstraintsData volumeConstraintsData = null; + + /** 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. + */ + public int particleCount + { + get { return positions != null ? positions.Length : 0; } + } + + public int activeParticleCount + { + 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. + */ + public bool usesOrientedParticles + { + get + { + return invRotationalMasses != null && invRotationalMasses.Length > 0 && + orientations != null && orientations.Length > 0; + } + } + + public virtual bool usesTethers + { + get { return false; } + } + + public bool IsParticleActive(int index) + { + return index < m_ActiveParticleCount; + } + + protected virtual void SwapWithFirstInactiveParticle(int index) + { + positions.Swap(index, m_ActiveParticleCount); + restPositions.Swap(index, m_ActiveParticleCount); + orientations.Swap(index, m_ActiveParticleCount); + restOrientations.Swap(index, m_ActiveParticleCount); + velocities.Swap(index, m_ActiveParticleCount); + angularVelocities.Swap(index, m_ActiveParticleCount); + invMasses.Swap(index, m_ActiveParticleCount); + invRotationalMasses.Swap(index, m_ActiveParticleCount); + 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;} + } + + /** + * Activates one particle. This operation preserves the relative order of all particles. + */ + public bool ActivateParticle(int index) + { + if (IsParticleActive(index)) + return false; + + SwapWithFirstInactiveParticle(index); + m_ActiveParticleCount++; + + return true; + } + + /** + * Deactivates one particle. 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 index) + { + if (!IsParticleActive(index)) + return false; + + m_ActiveParticleCount--; + SwapWithFirstInactiveParticle(index); + + return true; + } + + public bool empty + { + get { return m_Empty; } + } + + public void RecalculateBounds() + { + if (positions.Length > 0) + { + _bounds = new Bounds(positions[0],Vector3.zero); + for (int i = 1; i < positions.Length; ++i) + _bounds.Encapsulate(positions[i]); + } + else + _bounds = new Bounds(); + } + + public Bounds bounds + { + 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.batchCount > 0) + yield return distanceConstraintsData; + if (bendConstraintsData != null && bendConstraintsData.batchCount > 0) + yield return bendConstraintsData; + if (skinConstraintsData != null && skinConstraintsData.batchCount > 0) + yield return skinConstraintsData; + if (tetherConstraintsData != null && tetherConstraintsData.batchCount > 0) + yield return tetherConstraintsData; + if (stretchShearConstraintsData != null && stretchShearConstraintsData.batchCount > 0) + yield return stretchShearConstraintsData; + if (bendTwistConstraintsData != null && bendTwistConstraintsData.batchCount > 0) + yield return bendTwistConstraintsData; + if (shapeMatchingConstraintsData != null && shapeMatchingConstraintsData.batchCount > 0) + yield return shapeMatchingConstraintsData; + if (aerodynamicConstraintsData != null && aerodynamicConstraintsData.batchCount > 0) + yield return aerodynamicConstraintsData; + if (chainConstraintsData != null && chainConstraintsData.batchCount > 0) + yield return chainConstraintsData; + if (volumeConstraintsData != null && volumeConstraintsData.batchCount > 0) + yield return volumeConstraintsData; + } + + public IObiConstraints GetConstraintsByType(Oni.ConstraintType type) + { + switch (type) + { + case Oni.ConstraintType.Distance: return distanceConstraintsData; + case Oni.ConstraintType.Bending: return bendConstraintsData; + case Oni.ConstraintType.Skin: return skinConstraintsData; + case Oni.ConstraintType.Tether: return tetherConstraintsData; + case Oni.ConstraintType.BendTwist: return bendTwistConstraintsData; + case Oni.ConstraintType.StretchShear: return stretchShearConstraintsData; + case Oni.ConstraintType.ShapeMatching: return shapeMatchingConstraintsData; + case Oni.ConstraintType.Aerodynamics: return aerodynamicConstraintsData; + case Oni.ConstraintType.Chain: return chainConstraintsData; + case Oni.ConstraintType.Volume: return volumeConstraintsData; + default: return null; + } + } + + public int GetParticleRuntimeIndex(int blueprintIndex) + { + return blueprintIndex; + } + + public Vector3 GetParticlePosition(int index) + { + if (positions != null && index < positions.Length) + { + return positions[index]; + } + return Vector3.zero; + } + + public Quaternion GetParticleOrientation(int index) + { + if (orientations != null && index < orientations.Length) + { + return orientations[index]; + } + 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) + { + + Quaternion orientation = orientations[index]; + + b1 = orientation * Vector3.right; + b2 = orientation * Vector3.up; + b3 = orientation * Vector3.forward; + + b1[3] = principalRadii[index][0]; + b2[3] = principalRadii[index][1]; + b3[3] = principalRadii[index][2]; + + } + else + { + b1[3] = b2[3] = b3[3] = principalRadii[index][0]; + } + } + + public float GetParticleMaxRadius(int index) + { + if (principalRadii != null && index < principalRadii.Length) + { + return principalRadii[index][0]; + } + return 0; + } + + public Color GetParticleColor(int index) + { + if (colors != null && index < colors.Length) + { + return colors[index]; + } + else + return Color.white; + } + + public void GenerateImmediate() + { + var g = Generate(); + while (g.MoveNext()){} + } + + public IEnumerator Generate() + { + Clear(); + + IEnumerator g = Initialize(); + + while (g.MoveNext()) + yield return g.Current; + + RecalculateBounds(); + + m_Empty = false; + m_InitialActiveParticleCount = m_ActiveParticleCount; + + foreach (IObiConstraints constraints in GetConstraints()) + for (int i = 0; i < constraints.batchCount; ++i) + constraints.GetBatch(i).initialActiveConstraintCount = constraints.GetBatch(i).activeConstraintCount; + + CommitBlueprintChanges(); + +#if UNITY_EDITOR + if (!Application.isPlaying) + { + EditorUtility.SetDirty(this); + } +#endif + + 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; + orientations = null; + restOrientations = null; + velocities = null; + angularVelocities = null; + invMasses = null; + invRotationalMasses = null; + filters = null; + principalRadii = null; + colors = null; + + points = null; + edges = null; + triangles = null; + + distanceConstraintsData = null; + bendConstraintsData = null; + skinConstraintsData = null; + tetherConstraintsData = null; + bendTwistConstraintsData = null; + stretchShearConstraintsData = null; + shapeMatchingConstraintsData = null; + aerodynamicConstraintsData = null; + chainConstraintsData = null; + volumeConstraintsData = null; + + } + + public ObiParticleGroup InsertNewParticleGroup(string name, int index, bool saveImmediately = true) + { + if (index >= 0 && index <= groups.Count) + { + ObiParticleGroup group = ScriptableObject.CreateInstance(); + group.SetSourceBlueprint(this); + group.name = name; + +#if UNITY_EDITOR + if (!Application.isPlaying) + { + AssetDatabase.AddObjectToAsset(group, this); + Undo.RegisterCreatedObjectUndo(group, "Insert particle group"); + + Undo.RecordObject(this, "Insert particle group"); + groups.Insert(index, group); + + if (EditorUtility.IsPersistent(this)) + { + EditorUtility.SetDirty(this); + if (saveImmediately) + AssetDatabase.SaveAssetIfDirty(this); + } + } + else +#endif + { + groups.Insert(index, group); + } + + edited = true; + + return group; + } + return null; + } + + public ObiParticleGroup AppendNewParticleGroup(string name, bool saveImmediately = true) + { + return InsertNewParticleGroup(name, groups.Count, saveImmediately); + } + + public bool RemoveParticleGroupAt(int index, bool saveImmediately = true) + { + if (index >= 0 && index < groups.Count) + { +#if UNITY_EDITOR + if (!Application.isPlaying) + { + Undo.RecordObject(this, "Remove particle group"); + + var group = groups[index]; + groups.RemoveAt(index); + + if (group != null) + Undo.DestroyObjectImmediate(group); + + if (EditorUtility.IsPersistent(this)) + { + EditorUtility.SetDirty(this); + if (saveImmediately) + AssetDatabase.SaveAssetIfDirty(this); + } + } + else +#endif + { + var group = groups[index]; + groups.RemoveAt(index); + + if (group != null) + DestroyImmediate(group, true); + } + + edited = true; + + return true; + } + return false; + } + + public bool SetParticleGroupName(int index, string name, bool saveImmediately = true) + { + if (index >= 0 && index < groups.Count) + { +#if UNITY_EDITOR + if (!Application.isPlaying) + { + Undo.RecordObject(this, "Set particle group name"); + groups[index].name = name; + + if (EditorUtility.IsPersistent(this)) + { + EditorUtility.SetDirty(this); + if (saveImmediately) + AssetDatabase.SaveAssetIfDirty(this); + } + } + else +#endif + { + groups[index].name = name; + } + + edited = true; + + return true; + } + return false; + } + + public void ClearParticleGroups(bool registerUndo = true, bool saveImmediately = true) + { + if (groups.Count == 0) return; + +#if UNITY_EDITOR + if (!Application.isPlaying) + { + 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.SaveAssetIfDirty(this); + } + } + else +#endif + { + for (int i = 0; i < groups.Count; ++i) + if (groups[i] != null) + DestroyImmediate(groups[i], true); + } + + groups.Clear(); + } + + private bool IsParticleSharedInConstraint(int index, List particles, bool[] selected) + { + bool containsCurrent = false; + bool containsUnselected = false; + + for (int k = 0; k < particles.Count; ++k) + { + containsCurrent |= particles[k] == index; + containsUnselected |= !selected[particles[k]]; + + if (containsCurrent && containsUnselected) + { + return true; + } + } + return false; + } + + private bool DoesParticleShareConstraints(IObiConstraints constraints, int index, List particles, bool[] selected) + { + bool shared = false; + for (int i = 0; i < constraints.batchCount; ++i) + { + var batch = constraints.GetBatch(i); + for (int j = 0; j < batch.activeConstraintCount; ++j) + { + particles.Clear(); + batch.GetParticlesInvolved(j, particles); + + if (shared |= IsParticleSharedInConstraint(index, particles, selected)) + break; + } + + if (shared) + break; + } + return shared; + } + + private void DeactivateConstraintsWithInactiveParticles(IObiConstraints constraints, List particles) + { + for (int j = 0; j < constraints.batchCount; ++j) + { + var batch = constraints.GetBatch(j); + + for (int i = batch.activeConstraintCount - 1; i >= 0; --i) + { + particles.Clear(); + batch.GetParticlesInvolved(i, particles); + for (int k = 0; k < particles.Count; ++k) + { + if (!IsParticleActive(particles[k])) + { + batch.DeactivateConstraint(i); + break; + } + } + } + } + + edited = true; + } + + private void ParticlesSwappedInGroups(int index, int newIndex) + { + // Update groups: + foreach (ObiParticleGroup group in groups) + { + for (int i = 0; i < group.particleIndices.Count; ++i) + { + if (group.particleIndices[i] == newIndex) + group.particleIndices[i] = index; + else if (group.particleIndices[i] == index) + group.particleIndices[i] = newIndex; + } + } + + edited = true; + } + + public virtual void RemoveSelectedParticles(ref bool[] selected, bool optimize = true) + { + List particles = new List(); + + // iterate over all particles and get those selected ones that are only constrained to other selected ones. + for (int i = activeParticleCount - 1; i >= 0; --i) + { + // if the particle is not selected for optimization, skip it. + if (!selected[i]) + continue; + + // look if the particle shares distance or shape matching constraints with an unselected particle. + bool shared = false; + if (optimize) + { + shared |= DoesParticleShareConstraints(distanceConstraintsData, i, particles, selected); + shared |= DoesParticleShareConstraints(bendConstraintsData, i, particles, selected); + shared |= DoesParticleShareConstraints(shapeMatchingConstraintsData, i, particles, selected); + } + + if (!shared) + { + if (DeactivateParticle(i)) + { + selected.Swap(i, m_ActiveParticleCount); + + // Update constraints: + foreach (IObiConstraints constraints in GetConstraints()) + for (int j = 0; j < constraints.batchCount; ++j) + constraints.GetBatch(j).ParticlesSwapped(i, m_ActiveParticleCount); + + // Update groups: + ParticlesSwappedInGroups(i, m_ActiveParticleCount); + } + } + + } + + // deactivate all constraints that reference inactive particles: + foreach (IObiConstraints constraints in GetConstraints()) + DeactivateConstraintsWithInactiveParticles(constraints, particles); + + CommitBlueprintChanges(); + + edited = true; + } + + public void RestoreRemovedParticles() + { + m_ActiveParticleCount = m_InitialActiveParticleCount; + + foreach (IObiConstraints constraints in GetConstraints()) + for (int j = 0; j < constraints.batchCount; ++j) + constraints.GetBatch(j).activeConstraintCount = constraints.GetBatch(j).initialActiveConstraintCount; + + CommitBlueprintChanges(); + } + + public virtual void GenerateTethers(bool[] selected) { } + public virtual void ClearTethers() { } + + protected abstract IEnumerator Initialize(); + + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/ObiActorBlueprint.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/ObiActorBlueprint.cs.meta new file mode 100644 index 00000000..599d5ac9 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/ObiActorBlueprint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e041cee7fba0844ba933278f278090ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: d0123218ec6144d0983c099fc7339924, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/ObiMeshBasedActorBlueprint.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/ObiMeshBasedActorBlueprint.cs new file mode 100644 index 00000000..cd4792ba --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/ObiMeshBasedActorBlueprint.cs @@ -0,0 +1,13 @@ +using UnityEngine; +using System.Collections; + + +namespace Obi +{ + public abstract class ObiMeshBasedActorBlueprint : ObiActorBlueprint + { + public Mesh inputMesh; /**< Mesh used to generate the blueprint.*/ + public Vector3 scale = Vector3.one; + public Quaternion rotation = Quaternion.identity; + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/ObiMeshBasedActorBlueprint.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/ObiMeshBasedActorBlueprint.cs.meta new file mode 100644 index 00000000..1f175fe2 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/ObiMeshBasedActorBlueprint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5a20734f05b7e41d89888f99cc0e88f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/ObiParticleGroup.cs b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/ObiParticleGroup.cs new file mode 100644 index 00000000..2f6bf501 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/ObiParticleGroup.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + + +namespace Obi +{ + [Serializable] + public class ObiParticleGroup : ScriptableObject + { + public List particleIndices = new List() { }; + public ObiActorBlueprint m_Blueprint = null; + + public ObiActorBlueprint blueprint + { + get { return m_Blueprint; } + } + + public void SetSourceBlueprint(ObiActorBlueprint blueprint) + { + this.m_Blueprint = blueprint; + } + + public int Count + { + get { return particleIndices.Count; } + } + + public bool ContainsParticle(int index) + { + return particleIndices.Contains(index); + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Blueprints/ObiParticleGroup.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/ObiParticleGroup.cs.meta new file mode 100644 index 00000000..c7293e09 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Blueprints/ObiParticleGroup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 775ad4994fda946d1a5936c7e2dfc785 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions.meta new file mode 100644 index 00000000..f69d8090 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0507b097be2324070b9912008b71a4a8 +folderAsset: yes +timeCreated: 1448942565 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers.meta new file mode 100644 index 00000000..8f55bd38 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 16e8693eb314d42888bd5a08daebe03a +folderAsset: yes +timeCreated: 1501157275 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D.meta new file mode 100644 index 00000000..98f5ed00 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e56c9feb62e6b4f9ea6517ebb106419b +folderAsset: yes +timeCreated: 1503483313 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiBoxShapeTracker2D.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiBoxShapeTracker2D.cs new file mode 100644 index 00000000..3619a420 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiBoxShapeTracker2D.cs @@ -0,0 +1,48 @@ +using System; +using UnityEngine; + +namespace Obi{ + + public class ObiBoxShapeTracker2D : ObiShapeTracker + { + public ObiBoxShapeTracker2D(ObiCollider2D source, BoxCollider2D collider){ + this.source = source; + this.collider = collider; + } + + public override void UpdateIfNeeded (){ + + BoxCollider2D box = collider as BoxCollider2D; + + var world = ObiColliderWorld.GetInstance(); + int index = source.Handle.index; + + // update collider: + var shape = world.colliderShapes[index]; + shape.is2D = true; + shape.type = ColliderShape.ShapeType.Box; + shape.filter = source.Filter; + 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; + world.colliderShapes[index] = shape; + + // update bounds: + var aabb = world.colliderAabbs[index]; + aabb.FromBounds(box.bounds, shape.contactOffset, true); + world.colliderAabbs[index] = aabb; + + // update transform: + var trfm = world.colliderTransforms[index]; + trfm.FromTransform2D(box.transform, source.Rigidbody as ObiRigidbody2D); + world.colliderTransforms[index] = trfm; + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiBoxShapeTracker2D.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiBoxShapeTracker2D.cs.meta new file mode 100644 index 00000000..90d91f6c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiBoxShapeTracker2D.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e3701e56c1528404daa61e704345b750 +timeCreated: 1501960568 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCapsuleShapeTracker2D.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCapsuleShapeTracker2D.cs new file mode 100644 index 00000000..1351eefc --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCapsuleShapeTracker2D.cs @@ -0,0 +1,53 @@ +using System; +using UnityEngine; + +namespace Obi{ + + public class ObiCapsuleShapeTracker2D : ObiShapeTracker + { + public ObiCapsuleShapeTracker2D(ObiCollider2D source, CapsuleCollider2D collider) + { + this.source = source; + this.collider = collider; + } + + public override void UpdateIfNeeded () + { + CapsuleCollider2D capsule = collider as CapsuleCollider2D; + + // retrieve collision world and index: + var world = ObiColliderWorld.GetInstance(); + int index = source.Handle.index; + + // update collider: + var shape = world.colliderShapes[index]; + shape.is2D = true; + shape.type = ColliderShape.ShapeType.Capsule; + shape.filter = source.Filter; + 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; + shape.size = new Vector4((capsule.direction == CapsuleDirection2D.Horizontal ? size.y : size.x) * 0.5f, + Mathf.Max(size.x, size.y), + capsule.direction == CapsuleDirection2D.Horizontal ? 0 : 1, 0); + world.colliderShapes[index] = shape; + + // update bounds: + var aabb = world.colliderAabbs[index]; + aabb.FromBounds(capsule.bounds, shape.contactOffset,true); + world.colliderAabbs[index] = aabb; + + // update transform: + var trfm = world.colliderTransforms[index]; + trfm.FromTransform2D(capsule.transform, source.Rigidbody as ObiRigidbody2D); + world.colliderTransforms[index] = trfm; + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCapsuleShapeTracker2D.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCapsuleShapeTracker2D.cs.meta new file mode 100644 index 00000000..9e500572 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCapsuleShapeTracker2D.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fe1cd08d83cfe4785b8d5bb8e0bd3dd9 +timeCreated: 1501961541 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCircleShapeTracker2D.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCircleShapeTracker2D.cs new file mode 100644 index 00000000..7e8700de --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCircleShapeTracker2D.cs @@ -0,0 +1,52 @@ +using System; +using UnityEngine; + +namespace Obi{ + + public class ObiCircleShapeTracker2D : ObiShapeTracker + { + + public ObiCircleShapeTracker2D(ObiCollider2D source, CircleCollider2D collider) + { + this.source = source; + this.collider = collider; + } + + public override void UpdateIfNeeded () + { + + CircleCollider2D sphere = collider as CircleCollider2D; + + // retrieve collision world and index: + var world = ObiColliderWorld.GetInstance(); + int index = source.Handle.index; + + // update collider: + var shape = world.colliderShapes[index]; + shape.is2D = true; + 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.offset; + shape.size = Vector3.one * sphere.radius; + world.colliderShapes[index] = shape; + + // update bounds: + var aabb = world.colliderAabbs[index]; + aabb.FromBounds(sphere.bounds, shape.contactOffset, true); + world.colliderAabbs[index] = aabb; + + // update transform: + var trfm = world.colliderTransforms[index]; + trfm.FromTransform2D(sphere.transform, source.Rigidbody as ObiRigidbody2D); + world.colliderTransforms[index] = trfm; + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCircleShapeTracker2D.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCircleShapeTracker2D.cs.meta new file mode 100644 index 00000000..e2c7b7f3 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCircleShapeTracker2D.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4290734bafa8c46d8862202365a9f83b +timeCreated: 1501960324 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiEdgeShapeTracker2D.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiEdgeShapeTracker2D.cs new file mode 100644 index 00000000..7ccf6b53 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiEdgeShapeTracker2D.cs @@ -0,0 +1,72 @@ +using System; +using UnityEngine; +using System.Runtime.InteropServices; + +namespace Obi{ + + public class ObiEdgeShapeTracker2D : ObiShapeTracker + { + ObiEdgeMeshHandle handle; + + public ObiEdgeShapeTracker2D(ObiCollider2D source, EdgeCollider2D collider) + { + this.source = source; + this.collider = collider; + } + + public void UpdateEdgeData() + { + ObiColliderWorld.GetInstance().DestroyEdgeMesh(handle); + } + + public override void UpdateIfNeeded (){ + + EdgeCollider2D edgeCollider = collider as EdgeCollider2D; + + // retrieve collision world and index: + var world = ObiColliderWorld.GetInstance(); + int index = source.Handle.index; + + // get or create the mesh: + if (handle == null || !handle.isValid) + { + handle = world.GetOrCreateEdgeMesh(edgeCollider); + handle.Reference(); + } + + // update collider: + var shape = world.colliderShapes[index]; + shape.is2D = true; + shape.type = ColliderShape.ShapeType.EdgeMesh; + shape.filter = source.Filter; + 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; + world.colliderShapes[index] = shape; + + // update bounds: + var aabb = world.colliderAabbs[index]; + aabb.FromBounds(edgeCollider.bounds, shape.contactOffset, true); + world.colliderAabbs[index] = aabb; + + // update transform: + var trfm = world.colliderTransforms[index]; + trfm.FromTransform2D(edgeCollider.transform, source.Rigidbody as ObiRigidbody2D); + world.colliderTransforms[index] = trfm; + } + + public override void Destroy() + { + base.Destroy(); + + if (handle != null && handle.Dereference()) + ObiColliderWorld.GetInstance().DestroyEdgeMesh(handle); + } + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiEdgeShapeTracker2D.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiEdgeShapeTracker2D.cs.meta new file mode 100644 index 00000000..07524ca7 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiEdgeShapeTracker2D.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2d2b0912e5ba74985bb209d365e52f4b +timeCreated: 1502808634 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D.meta new file mode 100644 index 00000000..859897cc --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3eba36295266249e08782d3327db66cd +folderAsset: yes +timeCreated: 1503483325 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiBoxShapeTracker.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiBoxShapeTracker.cs new file mode 100644 index 00000000..f3fd6a45 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiBoxShapeTracker.cs @@ -0,0 +1,51 @@ +using System; +using UnityEngine; + +namespace Obi{ + + public class ObiBoxShapeTracker : ObiShapeTracker + { + + public ObiBoxShapeTracker(ObiCollider source, BoxCollider collider) + { + this.source = source; + this.collider = collider; + } + + public override void UpdateIfNeeded (){ + + BoxCollider box = collider as BoxCollider; + + // 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.Box; + shape.filter = source.Filter; + 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; + world.colliderShapes[index] = shape; + + // update bounds: + var aabb = world.colliderAabbs[index]; + aabb.FromBounds(box.bounds, shape.contactOffset); + world.colliderAabbs[index] = aabb; + + // update transform: + var trfm = world.colliderTransforms[index]; + trfm.FromTransform3D(box.transform, source.Rigidbody as ObiRigidbody); + world.colliderTransforms[index] = trfm; + + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiBoxShapeTracker.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiBoxShapeTracker.cs.meta new file mode 100644 index 00000000..9e3ef16f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiBoxShapeTracker.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7f9acb590fcdd47838d4e1929e463712 +timeCreated: 1501960568 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCapsuleShapeTracker.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCapsuleShapeTracker.cs new file mode 100644 index 00000000..5f74d5bb --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCapsuleShapeTracker.cs @@ -0,0 +1,49 @@ +using System; +using UnityEngine; + +namespace Obi{ + + public class ObiCapsuleShapeTracker : ObiShapeTracker + { + + public ObiCapsuleShapeTracker(ObiCollider source, CapsuleCollider collider){ + this.collider = collider; + this.source = source; + } + + public override void UpdateIfNeeded (){ + + CapsuleCollider capsule = collider as CapsuleCollider; + + // 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.Capsule; + shape.filter = source.Filter; + 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); + world.colliderShapes[index] = shape; + + // update bounds: + var aabb = world.colliderAabbs[index]; + aabb.FromBounds(capsule.bounds, shape.contactOffset); + world.colliderAabbs[index] = aabb; + + // update transform: + var trfm = world.colliderTransforms[index]; + trfm.FromTransform3D(capsule.transform, source.Rigidbody as ObiRigidbody); + world.colliderTransforms[index] = trfm; + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCapsuleShapeTracker.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCapsuleShapeTracker.cs.meta new file mode 100644 index 00000000..488258d0 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCapsuleShapeTracker.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ab81f697ad33c47c0b487129c7ef1761 +timeCreated: 1501961541 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCharacterControllerShapeTracker.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCharacterControllerShapeTracker.cs new file mode 100644 index 00000000..1ef9203e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCharacterControllerShapeTracker.cs @@ -0,0 +1,52 @@ +using System; +using UnityEngine; + +namespace Obi +{ + + public class ObiCharacterControllerShapeTracker : ObiShapeTracker + { + + public ObiCharacterControllerShapeTracker(ObiCollider source, CharacterController collider) + { + this.collider = collider; + this.source = source; + } + + public override void UpdateIfNeeded() + { + + CharacterController character = collider as CharacterController; + + // 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.Capsule; + shape.filter = source.Filter; + 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); + world.colliderShapes[index] = shape; + + // update bounds: + var aabb = world.colliderAabbs[index]; + aabb.FromBounds(character.bounds, shape.contactOffset); + world.colliderAabbs[index] = aabb; + + // update transform: + var trfm = world.colliderTransforms[index]; + trfm.FromTransform3D(character.transform, source.Rigidbody as ObiRigidbody); + world.colliderTransforms[index] = trfm; + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCharacterControllerShapeTracker.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCharacterControllerShapeTracker.cs.meta new file mode 100644 index 00000000..ccbb3adb --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCharacterControllerShapeTracker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c77ed89a210345ce9e9e549d11263db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiDistanceFieldShapeTracker.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiDistanceFieldShapeTracker.cs new file mode 100644 index 00000000..98a34d3f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiDistanceFieldShapeTracker.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using System.Runtime.InteropServices; + +namespace Obi{ + + public class ObiDistanceFieldShapeTracker : ObiShapeTracker + { + public ObiDistanceField distanceField; + ObiDistanceFieldHandle handle; + + + public ObiDistanceFieldShapeTracker(ObiCollider source, Component collider, ObiDistanceField distanceField){ + + this.source = source; + this.collider = collider; + this.distanceField = distanceField; + } + + /** + * Forces the tracker to update distance field data during the next call to UpdateIfNeeded(). + */ + public void UpdateDistanceFieldData() + { + ObiColliderWorld.GetInstance().DestroyDistanceField(handle); + } + + public override void UpdateIfNeeded () + { + + bool trigger = false; + if (collider is Collider) trigger = ((Collider)collider).isTrigger; + else if (collider is Collider2D) trigger = ((Collider2D)collider).isTrigger; + + // retrieve collision world and index: + var world = ObiColliderWorld.GetInstance(); + int index = source.Handle.index; + + // decrease reference count of current handle if the df data it points to is different + // than the df used by the collider: + if (handle != null && handle.owner != distanceField) + { + if (handle.Dereference()) + world.DestroyDistanceField(handle); + } + + if (handle == null || !handle.isValid) + { + handle = world.GetOrCreateDistanceField(distanceField); + handle.Reference(); + } + + // update collider: + var shape = world.colliderShapes[index]; + shape.type = ColliderShape.ShapeType.SignedDistanceField; + shape.filter = source.Filter; + 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; + + // update bounds: + var aabb = world.colliderAabbs[index]; + aabb.FromBounds(distanceField.FieldBounds.Transform(source.transform.localToWorldMatrix), shape.contactOffset); + world.colliderAabbs[index] = aabb; + + // update transform: + var trfm = world.colliderTransforms[index]; + trfm.FromTransform3D(source.transform, source.Rigidbody as ObiRigidbody); + world.colliderTransforms[index] = trfm; + } + + public override void Destroy() + { + base.Destroy(); + + if (handle != null && handle.Dereference()) + ObiColliderWorld.GetInstance().DestroyDistanceField(handle); + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiDistanceFieldShapeTracker.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiDistanceFieldShapeTracker.cs.meta new file mode 100644 index 00000000..71b25fc8 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiDistanceFieldShapeTracker.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b9b443b752c21400ca6cfc151526f107 +timeCreated: 1504879085 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiMeshShapeTracker.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiMeshShapeTracker.cs new file mode 100644 index 00000000..f710e2ec --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiMeshShapeTracker.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using System.Runtime.InteropServices; + +namespace Obi{ + + public class ObiMeshShapeTracker : ObiShapeTracker + { + ObiTriangleMeshHandle handle; + + public Mesh targetMesh + { + get { + var mc = collider as MeshCollider; + return mc?.sharedMesh; + } + } + + public ObiMeshShapeTracker(ObiCollider source, MeshCollider collider){ + + this.source = source; + this.collider = collider; + } + + /** + * Forces the tracker to update mesh data during the next call to UpdateIfNeeded(). + */ + public void UpdateMeshData() + { + ObiColliderWorld.GetInstance().DestroyTriangleMesh(handle); + } + + public override void UpdateIfNeeded () + { + + MeshCollider meshCollider = collider as MeshCollider; + + // retrieve collision world and index: + var world = ObiColliderWorld.GetInstance(); + int index = source.Handle.index; + + // decrease reference count of current handle if the mesh data it points to is different + // than the mesh used by the collider: + if (handle != null && handle.owner != meshCollider.sharedMesh) + { + if (handle.Dereference()) + world.DestroyTriangleMesh(handle); + } + + // get or create the mesh: + if (handle == null || !handle.isValid) + { + handle = world.GetOrCreateTriangleMesh(meshCollider.sharedMesh); + handle.Reference(); + } + + // update collider: + var shape = world.colliderShapes[index]; + shape.type = ColliderShape.ShapeType.TriangleMesh; + shape.filter = source.Filter; + 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; + + // update bounds: + var aabb = world.colliderAabbs[index]; + aabb.FromBounds(meshCollider.bounds, shape.contactOffset); + world.colliderAabbs[index] = aabb; + + // update transform: + var trfm = world.colliderTransforms[index]; + trfm.FromTransform3D(meshCollider.transform, source.Rigidbody as ObiRigidbody); + world.colliderTransforms[index] = trfm; + } + + public override void Destroy() + { + base.Destroy(); + + if (handle != null && handle.Dereference()) + ObiColliderWorld.GetInstance().DestroyTriangleMesh(handle); + } + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiMeshShapeTracker.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiMeshShapeTracker.cs.meta new file mode 100644 index 00000000..f7911fbb --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiMeshShapeTracker.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c955001531e3444fd9615a5272954dea +timeCreated: 1502875710 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiShapeTracker.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiShapeTracker.cs new file mode 100644 index 00000000..69bd4ba4 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiShapeTracker.cs @@ -0,0 +1,20 @@ +using System; +using UnityEngine; + +namespace Obi{ + + public abstract class ObiShapeTracker + { + protected ObiColliderBase source; + protected Component collider; + + public virtual void Destroy(){ + } + + public abstract void UpdateIfNeeded (); + + } + +} + + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiShapeTracker.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiShapeTracker.cs.meta new file mode 100644 index 00000000..749c718f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiShapeTracker.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5f455a735ac894ee7bddecd2b5a64ca8 +timeCreated: 1501960324 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiSphereShapeTracker.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiSphereShapeTracker.cs new file mode 100644 index 00000000..85b3131f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiSphereShapeTracker.cs @@ -0,0 +1,50 @@ +using System; +using UnityEngine; + +namespace Obi{ + + public class ObiSphereShapeTracker : ObiShapeTracker + { + + public ObiSphereShapeTracker(ObiCollider source, SphereCollider collider) + { + this.source = source; + this.collider = collider; + } + + public override void UpdateIfNeeded() + { + SphereCollider sphere = collider as SphereCollider; + + // 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 bounds: + var aabb = world.colliderAabbs[index]; + aabb.FromBounds(sphere.bounds, shape.contactOffset); + world.colliderAabbs[index] = aabb; + + // update transform: + var trfm = world.colliderTransforms[index]; + trfm.FromTransform3D(sphere.transform, source.Rigidbody as ObiRigidbody); + world.colliderTransforms[index] = trfm; + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiSphereShapeTracker.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiSphereShapeTracker.cs.meta new file mode 100644 index 00000000..94685360 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiSphereShapeTracker.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 221c651500acc4cbfa30ed329aebb822 +timeCreated: 1501960324 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiTerrainShapeTracker.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiTerrainShapeTracker.cs new file mode 100644 index 00000000..59774168 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiTerrainShapeTracker.cs @@ -0,0 +1,75 @@ +using System; +using UnityEngine; +using System.Runtime.InteropServices; + +namespace Obi{ + + public class ObiTerrainShapeTracker : ObiShapeTracker + { + ObiHeightFieldHandle handle; + + public ObiTerrainShapeTracker(ObiCollider source, TerrainCollider collider){ + + this.source = source; + this.collider = collider; + } + + public void UpdateHeightData() + { + ObiColliderWorld.GetInstance().DestroyHeightField(handle); + } + + public override void UpdateIfNeeded () + { + + TerrainCollider terrain = collider as TerrainCollider; + + // retrieve collision world and index: + var world = ObiColliderWorld.GetInstance(); + int index = source.Handle.index; + + int resolution = terrain.terrainData.heightmapResolution; + + // get or create the heightfield: + if (handle == null || !handle.isValid) + { + handle = world.GetOrCreateHeightField(terrain.terrainData); + handle.Reference(); + } + + // update collider: + var shape = world.colliderShapes[index]; + shape.type = ColliderShape.ShapeType.Heightmap; + shape.filter = source.Filter; + 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; + shape.center = new Vector4(resolution, resolution, resolution, resolution); + world.colliderShapes[index] = shape; + + // update bounds: + var aabb = world.colliderAabbs[index]; + aabb.FromBounds(terrain.bounds, shape.contactOffset); + world.colliderAabbs[index] = aabb; + + // update transform: + var trfm = world.colliderTransforms[index]; + trfm.FromTransform3D(terrain.transform, source.Rigidbody as ObiRigidbody); + world.colliderTransforms[index] = trfm; + } + + public override void Destroy() + { + base.Destroy(); + + if (handle != null && handle.Dereference()) + ObiColliderWorld.GetInstance().DestroyHeightField(handle); + } + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiTerrainShapeTracker.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiTerrainShapeTracker.cs.meta new file mode 100644 index 00000000..21b385e3 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiTerrainShapeTracker.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 601187ba897f54e20b787637df64e96b +timeCreated: 1502808634 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiCollider.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiCollider.cs new file mode 100644 index 00000000..71ad68ae --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiCollider.cs @@ -0,0 +1,117 @@ +using UnityEngine; +using UnityEngine.Serialization; + +namespace Obi +{ + + /** + * Add this component to any Collider that you want to be considered by Obi. + */ + [ExecuteInEditMode] + [RequireComponent(typeof(Collider))] + public class ObiCollider : ObiColliderBase + { + + [SerializeProperty("sourceCollider")] + [FormerlySerializedAs("SourceCollider")] + [SerializeField] private Collider m_SourceCollider; + + /// + /// The Unity collider that this ObiCollider should mimic. + /// + /// This is automatically set when you first create the ObiCollider component, but you can override it afterwards. + public Collider sourceCollider + { + set + { + if (value != null && value.gameObject != this.gameObject) + { + Debug.LogError("The Collider component must reside in the same GameObject as ObiCollider."); + return; + } + + RemoveCollider(); + m_SourceCollider = value; + AddCollider(); + + } + get { return m_SourceCollider; } + } + + [SerializeProperty("distanceField")] + [FormerlySerializedAs("distanceField")] + [SerializeField] private ObiDistanceField m_DistanceField; + + /// + /// The distance field used by this collider. + /// + /// Setting a distance field will cause the collider to ignore its and use the distance field instead. + public ObiDistanceField distanceField + { + set + { + if (m_DistanceField != value) + { + m_DistanceField = value; + CreateTracker(); + } + } + get { return m_DistanceField; } + } + + /** + * Creates an OniColliderTracker of the appropiate type. + */ + protected override void CreateTracker() + { + + if (tracker != null) + { + tracker.Destroy(); + tracker = null; + } + + if (distanceField != null) + tracker = new ObiDistanceFieldShapeTracker(this, m_SourceCollider, distanceField); + else + { + + if (m_SourceCollider is SphereCollider) + tracker = new ObiSphereShapeTracker(this, (SphereCollider)m_SourceCollider); + else if (m_SourceCollider is BoxCollider) + tracker = new ObiBoxShapeTracker(this, (BoxCollider)m_SourceCollider); + else if (m_SourceCollider is CapsuleCollider) + tracker = new ObiCapsuleShapeTracker(this, (CapsuleCollider)m_SourceCollider); + else if (m_SourceCollider is CharacterController) + tracker = new ObiCharacterControllerShapeTracker(this, (CharacterController)m_SourceCollider); + else if (m_SourceCollider is TerrainCollider) + tracker = new ObiTerrainShapeTracker(this, (TerrainCollider)m_SourceCollider); + else if (m_SourceCollider is MeshCollider) + tracker = new ObiMeshShapeTracker(this,(MeshCollider)m_SourceCollider); + else + Debug.LogWarning("Collider type not supported by Obi."); + + } + + } + + protected override Component GetUnityCollider(ref bool enabled) + { + + if (m_SourceCollider != null) + enabled = m_SourceCollider.enabled; + + return m_SourceCollider; + } + + protected override void FindSourceCollider() + { + if (sourceCollider == null) + sourceCollider = GetComponent(); + else + AddCollider(); + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiCollider.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiCollider.cs.meta new file mode 100644 index 00000000..430e5477 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiCollider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6757b231cedd544c583ef8aeaf773b2a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6da22d6bce08a4f3d86542bb903de689, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiCollider2D.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiCollider2D.cs new file mode 100644 index 00000000..2ebcd494 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiCollider2D.cs @@ -0,0 +1,82 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + + /** + * Add this component to any Collider that you want to be considered by Obi. + */ + [ExecuteInEditMode] + [RequireComponent(typeof(Collider2D))] + public class ObiCollider2D : ObiColliderBase + { + [SerializeProperty("SourceCollider")] + [SerializeField] private Collider2D sourceCollider; + + public Collider2D SourceCollider + { + set + { + if (value.gameObject != this.gameObject) + { + Debug.LogError("The Collider component must reside in the same GameObject as ObiCollider."); + } + else + { + sourceCollider = value; + + RemoveCollider(); + AddCollider(); + } + } + get { return sourceCollider; } + } + + /** + * Creates an OniColliderTracker of the appropiate type. + */ + protected override void CreateTracker() + { + + if (tracker != null) + { + tracker.Destroy(); + tracker = null; + } + + if (sourceCollider is CircleCollider2D) + tracker = new ObiCircleShapeTracker2D(this,(CircleCollider2D)sourceCollider); + else if (sourceCollider is BoxCollider2D) + tracker = new ObiBoxShapeTracker2D(this,(BoxCollider2D)sourceCollider); + else if (sourceCollider is CapsuleCollider2D) + tracker = new ObiCapsuleShapeTracker2D(this,(CapsuleCollider2D)sourceCollider); + else if (sourceCollider is EdgeCollider2D) + tracker = new ObiEdgeShapeTracker2D(this,(EdgeCollider2D)sourceCollider); + else + Debug.LogWarning("Collider2D type not supported by Obi."); + + } + + protected override Component GetUnityCollider(ref bool enabled) + { + + if (sourceCollider != null) + enabled = sourceCollider.enabled; + + return sourceCollider; + } + + protected override void FindSourceCollider() + { + if (SourceCollider == null) + SourceCollider = GetComponent(); + else + AddCollider(); + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiCollider2D.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiCollider2D.cs.meta new file mode 100644 index 00000000..06928c2a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiCollider2D.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7f6a9934a1a0f44e89ccbb25355461bb +timeCreated: 1503509235 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: e7185d0557058412db2fc499de3a0739, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiColliderBase.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiColliderBase.cs new file mode 100644 index 00000000..e69061de --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiColliderBase.cs @@ -0,0 +1,228 @@ +using UnityEngine; +using System; + +namespace Obi +{ + + /** + * Implements common functionality for ObiCollider and ObiCollider2D. + */ + public abstract class ObiColliderBase : MonoBehaviour + { + + [SerializeProperty("Thickness")] + [SerializeField] private float thickness = 0; + + [SerializeProperty("Inverted")] + [SerializeField] private bool inverted = false; + + [SerializeProperty("CollisionMaterial")] + [SerializeField] private ObiCollisionMaterial material; + + [SerializeField] private int filter = ObiUtils.MakeFilter(ObiUtils.CollideWithEverything, 0); + + public ObiCollisionMaterial CollisionMaterial + { + set + { + if (material != value) + { + material = value; + needsUpdate = true; + } + } + get { return material; } + } + + public int Filter + { + set + { + if (filter != value) + { + filter = value; + needsUpdate = true; + } + } + get { return filter; } + } + + public float Thickness + { + set + { + if (!Mathf.Approximately(thickness, value)) + { + thickness = value; + needsUpdate = true; + } + } + get { return thickness; } + } + + public bool Inverted + { + set + { + if (inverted != value) + { + inverted = value; + needsUpdate = true; + } + } + get { return inverted; } + } + + public ObiShapeTracker Tracker + { + get { return tracker; } + } + + public ObiColliderHandle Handle + { + get + { + if (shapeHandle == null) + FindSourceCollider(); + return shapeHandle; + } + } + + public ObiForceZone ForceZone + { + get; set; + } + + public ObiRigidbodyBase Rigidbody + { + get { return obiRigidbody; } + } + + protected ObiColliderHandle shapeHandle; + protected ObiRigidbodyBase obiRigidbody; + protected bool wasUnityColliderEnabled = true; + protected bool needsUpdate = true; + + protected ObiShapeTracker tracker; /**< tracker object used to determine when to update the collider's shape*/ + + /** + * Creates an OniColliderTracker of the appropiate type. + */ + protected abstract void CreateTracker(); + + protected abstract Component GetUnityCollider(ref bool enabled); + + protected abstract void FindSourceCollider(); + + protected void CreateRigidbody() + { + + obiRigidbody = null; + + // find the first rigidbody up our hierarchy: + Rigidbody rb = GetComponentInParent(); + Rigidbody2D rb2D = GetComponentInParent(); + + // if we have an rigidbody above us, see if it has a ObiRigidbody component and add one if it doesn't: + if (rb != null) + { + + obiRigidbody = rb.GetComponent(); + + if (obiRigidbody == null) + obiRigidbody = rb.gameObject.AddComponent(); + + } + else if (rb2D != null) + { + + obiRigidbody = rb2D.GetComponent(); + + if (obiRigidbody == null) + obiRigidbody = rb2D.gameObject.AddComponent(); + + } + + } + + private void OnTransformParentChanged() + { + CreateRigidbody(); + } + + protected void AddCollider() + { + + Component unityCollider = GetUnityCollider(ref wasUnityColliderEnabled); + + if (unityCollider != null && (shapeHandle == null || !shapeHandle.isValid)) + { + shapeHandle = ObiColliderWorld.GetInstance().CreateCollider(); + shapeHandle.owner = this; + + // Create shape tracker: + CreateTracker(); + + // Create rigidbody if necessary, and link ourselves to it: + CreateRigidbody(); + } + + } + + protected void RemoveCollider() + { + ObiColliderWorld.GetInstance().DestroyCollider(shapeHandle); + + // Destroy shape tracker: + if (tracker != null) + { + tracker.Destroy(); + tracker = null; + } + } + + public void ForceUpdate() + { + needsUpdate = true; + } + + /** + * Check if the collider transform or its shape have changed any relevant property, and update their Oni counterparts. + */ + public void UpdateIfNeeded() + { + bool unityColliderEnabled = false; + Component unityCollider = GetUnityCollider(ref unityColliderEnabled); + + if (unityCollider != null) + { + // Only if this object is not static: + if (tracker != null && needsUpdate) + { + tracker.UpdateIfNeeded(); + } + + // store isStatic, *after* updating the tracker at least once. + needsUpdate = !unityCollider.gameObject.isStatic; + } + // If the unity collider is null but its handle is valid, the unity collider has been destroyed. + else if (shapeHandle != null && shapeHandle.isValid) + RemoveCollider(); + } + + private void OnEnable() + { + needsUpdate = true; + + // Initialize using the source collider specified by the user (or find an appropiate one). + FindSourceCollider(); + } + + private void OnDisable() + { + RemoveCollider(); + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiColliderBase.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiColliderBase.cs.meta new file mode 100644 index 00000000..7bc649a2 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiColliderBase.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5a055da07c6fe4debad9680a4b251f7a +timeCreated: 1503477796 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs new file mode 100644 index 00000000..f92b9d5a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs @@ -0,0 +1,646 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +namespace Obi +{ + public class ObiResourceHandle where T : class + { + public T owner = null; /**< reference to the owner instance*/ + public int index = -1; /**< index of this resource in the collision world.*/ + private int referenceCount = 0; /**< amount of references to this handle. Can be used to clean up any associated resources after it reaches zero.*/ + + public bool isValid + { + get { return index >= 0; } + } + + public void Invalidate() + { + index = -1; + referenceCount = 0; + } + + public void Reference() + { + referenceCount++; + } + + public bool Dereference() + { + return --referenceCount == 0; + } + + public ObiResourceHandle(int index = -1) + { + this.index = index; + owner = null; + } + } + + public class ObiColliderHandle : ObiResourceHandle + { + 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) { } + } + public class ObiRigidbodyHandle : ObiResourceHandle + { + public ObiRigidbodyHandle(int index = -1) : base(index) { } + } + + public class ObiColliderWorld + { + [NonSerialized] public List implementations; + + [NonSerialized] public List colliderHandles; // list of collider handles, used by ObiCollider components to retrieve them. + [NonSerialized] public ObiNativeColliderShapeList colliderShapes; // list of collider shapes. + [NonSerialized] public ObiNativeAabbList colliderAabbs; // list of collider bounds. + [NonSerialized] public ObiNativeAffineTransformList colliderTransforms; // list of collider transforms. + + [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. + [NonSerialized] public ObiNativeRigidbodyList rigidbodies; // list of rigidbodies. + + [NonSerialized] public ObiTriangleMeshContainer triangleMeshContainer; + [NonSerialized] public ObiEdgeMeshContainer edgeMeshContainer; + [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; + + private bool updatedThisFrame = false; + + private static ObiColliderWorld instance; + + public static ObiColliderWorld GetInstance() + { + if (instance == null) + { + instance = new ObiColliderWorld(); + instance.Initialize(); + } + return instance; + } + + private void Initialize() + { + // Allocate all lists: + if (implementations == null) + implementations = new List(); + + if (colliderHandles == null) + colliderHandles = new List(); + if (colliderShapes == null) + colliderShapes = new ObiNativeColliderShapeList(); + if (colliderAabbs == null) + colliderAabbs = new ObiNativeAabbList(); + 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) + collisionMaterials = new ObiNativeCollisionMaterialList(); + + if (rigidbodyHandles == null) + rigidbodyHandles = new List(); + if (rigidbodies == null) + rigidbodies = new ObiNativeRigidbodyList(); + + if (triangleMeshContainer == null) + triangleMeshContainer = new ObiTriangleMeshContainer(); + if (edgeMeshContainer == null) + edgeMeshContainer = new ObiEdgeMeshContainer(); + if (distanceFieldContainer == null) + 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() + { + updatedThisFrame = false; + for (int i = 0; i < implementations.Count; ++i) + { + implementations[i].SetColliders(colliderShapes, colliderAabbs, colliderTransforms); + implementations[i].UpdateWorld(0); + } + + // Invalidate all handles: + if (colliderHandles != null) + foreach (var handle in colliderHandles) + handle.Invalidate(); + + if (rigidbodyHandles != null) + foreach (var handle in rigidbodyHandles) + handle.Invalidate(); + + if (materialHandles != null) + 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; + + collidersToCreate = null; + collidersToDestroy = null; + forceZonesToCreate = null; + forceZonesToDestroy = null; + rigidbodiesToCreate = null; + rigidbodiesToDestroy = null; + + colliderShapes?.Dispose(); + colliderAabbs?.Dispose(); + colliderTransforms?.Dispose(); + forceZones?.Dispose(); + collisionMaterials?.Dispose(); + rigidbodies?.Dispose(); + + triangleMeshContainer?.Dispose(); + edgeMeshContainer?.Dispose(); + distanceFieldContainer?.Dispose(); + heightFieldContainer?.Dispose(); + + instance = null; + } + + private void DestroyIfUnused() + { + // when there are no data and no implementations, the world gets destroyed. + if (colliderHandles.Count == 0 && + rigidbodyHandles.Count == 0 && + forceZoneHandles.Count == 0 && + materialHandles.Count == 0 && + implementations.Count == 0) + + Destroy(); + } + + public void RegisterImplementation(IColliderWorldImpl impl) + { + if (!implementations.Contains(impl)) + implementations.Add(impl); + } + + public void UnregisterImplementation(IColliderWorldImpl impl) + { + implementations.Remove(impl); + DestroyIfUnused(); + } + + public ObiColliderHandle CreateCollider() + { + var handle = new ObiColliderHandle(); + + // 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(); + + // in-editor, we create data right away since the simulation is not running. + if (!Application.isPlaying) + CreateRigidbodyData(handle); + else + rigidbodiesToCreate.Add(handle); + + return handle; + } + + public ObiCollisionMaterialHandle CreateCollisionMaterial() + { + var handle = new ObiCollisionMaterialHandle(materialHandles.Count); + materialHandles.Add(handle); + + collisionMaterials.Add(new CollisionMaterial()); + + return handle; + } + + public ObiTriangleMeshHandle GetOrCreateTriangleMesh(Mesh mesh) + { + return triangleMeshContainer.GetOrCreateTriangleMesh(mesh); + } + + public void DestroyTriangleMesh(ObiTriangleMeshHandle meshHandle) + { + triangleMeshContainer.DestroyTriangleMesh(meshHandle); + } + + public ObiEdgeMeshHandle GetOrCreateEdgeMesh(EdgeCollider2D collider) + { + return edgeMeshContainer.GetOrCreateEdgeMesh(collider); + } + + public void DestroyEdgeMesh(ObiEdgeMeshHandle meshHandle) + { + edgeMeshContainer.DestroyEdgeMesh(meshHandle); + } + + public ObiDistanceFieldHandle GetOrCreateDistanceField(ObiDistanceField df) + { + return distanceFieldContainer.GetOrCreateDistanceField(df); + } + + public void DestroyDistanceField(ObiDistanceFieldHandle dfHandle) + { + distanceFieldContainer.DestroyDistanceField(dfHandle); + } + + public ObiHeightFieldHandle GetOrCreateHeightField(TerrainData hf) + { + return heightFieldContainer.GetOrCreateHeightField(hf); + } + + public void DestroyHeightField(ObiHeightFieldHandle hfHandle) + { + heightFieldContainer.DestroyHeightField(hfHandle); + } + + public void DestroyCollider(ObiColliderHandle handle) + { + // Destroy data right away if no simulation is running. + if (!Application.isPlaying || implementations.Count == 0) + DestroyColliderData(handle); + else + { + // 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) + { + // Destroy data right away if no simulation is running. + if (!Application.isPlaying || implementations.Count == 0) + DestroyRigidbodyData(handle); + else + { + // In case the handle is in the creation queue, just remove it. + if (!rigidbodiesToCreate.Remove(handle)) + rigidbodiesToDestroy.Add(handle); + } + } + + public void DestroyCollisionMaterial(ObiCollisionMaterialHandle handle) + { + if (collisionMaterials != null && handle != null && handle.isValid && handle.index < materialHandles.Count) + { + int index = handle.index; + int lastIndex = materialHandles.Count - 1; + + // swap all collider info: + materialHandles.Swap(index, lastIndex); + collisionMaterials.Swap(index, lastIndex); + + // update the index of the handle we swapped with: + materialHandles[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: + materialHandles.RemoveAt(lastIndex); + collisionMaterials.count--; + + DestroyIfUnused(); + } + } + + 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; + + // force other 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. + for (int i = 0; i < colliderHandles.Count; ++i) colliderHandles[i].owner.ForceUpdate(); + + // 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(); + } + } + + 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()); + } + + 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 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) + { + if (updatedThisFrame) + return; + + updatedThisFrame = true; + + // 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: + if (colliderHandles != null) + for (int i = 0; i < colliderHandles.Count; ++i) + colliderHandles[i].owner.UpdateIfNeeded(); + + // update all force zones: + if (forceZoneHandles != null) + for (int i = 0; i < forceZoneHandles.Count; ++i) + forceZoneHandles[i].owner.UpdateIfNeeded(); + + // update rigidbodies: + if (rigidbodyHandles != null) + 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) + { + if (implementations[i].referenceCount > 0) + { + // 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 world implementation: + implementations[i].UpdateWorld(deltaTime); + } + } + } + + public void FrameStart() + { + updatedThisFrame = false; + } + + 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/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs.meta new file mode 100644 index 00000000..e2753233 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 72e79cbbc15cc42e1b3e0db8936d18a5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs.orig b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs.orig new file mode 100644 index 00000000..46d5419e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs.orig @@ -0,0 +1,452 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +namespace Obi +{ + public class ObiResourceHandle where T : class + { + public T owner = null; /**< reference to the owner instance*/ + public int index = -1; /**< index of this resource in the collision world.*/ + private int referenceCount = 0; /**< amount of references to this handle. Can be used to clean up any associated resources after it reaches zero.*/ + + public bool isValid + { + get { return index >= 0; } + } + + public void Invalidate() + { + index = -1; + referenceCount = 0; + } + + public void Reference() + { + referenceCount++; + } + + public bool Dereference() + { + return --referenceCount == 0; + } + + public ObiResourceHandle(int index = -1) + { + this.index = index; + owner = null; + } + } + + public class ObiColliderHandle : ObiResourceHandle + { + public ObiColliderHandle(int index = -1) : base(index) { } + } + public class ObiCollisionMaterialHandle : ObiResourceHandle + { + public ObiCollisionMaterialHandle(int index = -1) : base(index) { } + } + public class ObiRigidbodyHandle : ObiResourceHandle + { + public ObiRigidbodyHandle(int index = -1) : base(index) { } + } + + [ExecuteInEditMode] + public class ObiColliderWorld + { + [NonSerialized] public List implementations; + + [NonSerialized] public List colliderHandles; // list of collider handles, used by ObiCollider components to retrieve them. + [NonSerialized] public ObiNativeColliderShapeList colliderShapes; // list of collider shapes. + [NonSerialized] public ObiNativeAabbList colliderAabbs; // list of collider bounds. + [NonSerialized] public ObiNativeAffineTransformList colliderTransforms; // list of collider transforms. + + [NonSerialized] public List materialHandles; + [NonSerialized] public ObiNativeCollisionMaterialList collisionMaterials; // list of collision materials. + + [NonSerialized] public List rigidbodyHandles; // list of rigidbody handles, used by ObiRigidbody components to retrieve them. + [NonSerialized] public ObiNativeRigidbodyList rigidbodies; // list of rigidbodies. + + [NonSerialized] public ObiTriangleMeshContainer triangleMeshContainer; + [NonSerialized] public ObiEdgeMeshContainer edgeMeshContainer; + [NonSerialized] public ObiDistanceFieldContainer distanceFieldContainer; + [NonSerialized] public ObiHeightFieldContainer heightFieldContainer; + + private static ObiColliderWorld instance; + + public static ObiColliderWorld GetInstance() + { + if (instance == null) + { + instance = new ObiColliderWorld(); + instance.Initialize(); + } + return instance; + } + + private void Initialize() + { + // Allocate all lists: + if (implementations == null) + implementations = new List(); + + if (colliderHandles == null) + colliderHandles = new List(); + if (colliderShapes == null) + colliderShapes = new ObiNativeColliderShapeList(); + if (colliderAabbs == null) + colliderAabbs = new ObiNativeAabbList(); + if (colliderTransforms == null) + colliderTransforms = new ObiNativeAffineTransformList(); + + if (materialHandles == null) + materialHandles = new List(); + if (collisionMaterials == null) + collisionMaterials = new ObiNativeCollisionMaterialList(); + + if (rigidbodyHandles == null) + rigidbodyHandles = new List(); + if (rigidbodies == null) + rigidbodies = new ObiNativeRigidbodyList(); + + if (triangleMeshContainer == null) + triangleMeshContainer = new ObiTriangleMeshContainer(); + if (edgeMeshContainer == null) + edgeMeshContainer = new ObiEdgeMeshContainer(); + if (distanceFieldContainer == null) + distanceFieldContainer = new ObiDistanceFieldContainer(); + if (heightFieldContainer == null) + heightFieldContainer = new ObiHeightFieldContainer(); + } + + private void Destroy() + { + for (int i = 0; i < implementations.Count; ++i) + { + implementations[i].SetColliders(colliderShapes, colliderAabbs, colliderTransforms, 0); + implementations[i].UpdateWorld(0); + } + + // Invalidate all handles: + if (colliderHandles != null) + foreach (var handle in colliderHandles) + handle.Invalidate(); + + if (rigidbodyHandles != null) + foreach (var handle in rigidbodyHandles) + handle.Invalidate(); + + if (materialHandles != null) + foreach (var handle in materialHandles) + handle.Invalidate(); + + // Dispose of all lists: + implementations = null; + colliderHandles = null; + rigidbodyHandles = null; + materialHandles = null; + + if (colliderShapes != null) + colliderShapes.Dispose(); + if (colliderAabbs != null) + colliderAabbs.Dispose(); + if (colliderTransforms != null) + colliderTransforms.Dispose(); + + if (collisionMaterials != null) + collisionMaterials.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(); + + 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) + Destroy(); + } + + public void RegisterImplementation(IColliderWorldImpl impl) + { + if (!implementations.Contains(impl)) + implementations.Add(impl); + } + + public void UnregisterImplementation(IColliderWorldImpl impl) + { + implementations.Remove(impl); + DestroyIfUnused(); + } + + public ObiColliderHandle CreateCollider() + { + var handle = new ObiColliderHandle(colliderHandles.Count); + colliderHandles.Add(handle); + + colliderShapes.Add(new ColliderShape()); + colliderAabbs.Add(new Aabb()); + colliderTransforms.Add(new AffineTransform()); + + return handle; + } + + public ObiRigidbodyHandle CreateRigidbody() + { + var handle = new ObiRigidbodyHandle(rigidbodyHandles.Count); + rigidbodyHandles.Add(handle); + + rigidbodies.Add(new ColliderRigidbody()); + + return handle; + } + + public ObiCollisionMaterialHandle CreateCollisionMaterial() + { + var handle = new ObiCollisionMaterialHandle(materialHandles.Count); + materialHandles.Add(handle); + + collisionMaterials.Add(new CollisionMaterial()); + + return handle; + } + + public ObiTriangleMeshHandle GetOrCreateTriangleMesh(Mesh mesh) + { + return triangleMeshContainer.GetOrCreateTriangleMesh(mesh); + } + + public void DestroyTriangleMesh(ObiTriangleMeshHandle meshHandle) + { + triangleMeshContainer.DestroyTriangleMesh(meshHandle); + } + + public ObiEdgeMeshHandle GetOrCreateEdgeMesh(EdgeCollider2D collider) + { + return edgeMeshContainer.GetOrCreateEdgeMesh(collider); + } + + public void DestroyEdgeMesh(ObiEdgeMeshHandle meshHandle) + { + edgeMeshContainer.DestroyEdgeMesh(meshHandle); + } + + public ObiDistanceFieldHandle GetOrCreateDistanceField(ObiDistanceField df) + { + return distanceFieldContainer.GetOrCreateDistanceField(df); + } + + public void DestroyDistanceField(ObiDistanceFieldHandle dfHandle) + { + distanceFieldContainer.DestroyDistanceField(dfHandle); + } + + public ObiHeightFieldHandle GetOrCreateHeightField(TerrainData hf) + { + return heightFieldContainer.GetOrCreateHeightField(hf); + } + + public void DestroyHeightField(ObiHeightFieldHandle hfHandle) + { + heightFieldContainer.DestroyHeightField(hfHandle); + } + + public void DestroyCollider(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--; + + DestroyIfUnused(); + } + + } + + public void DestroyRigidbody(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(); + } + + } + + public void DestroyCollisionMaterial(ObiCollisionMaterialHandle handle) + { + if (collisionMaterials != null && handle != null && handle.isValid && handle.index < materialHandles.Count) + { + int index = handle.index; + int lastIndex = materialHandles.Count - 1; + + // swap all collider info: + materialHandles.Swap(index, lastIndex); + collisionMaterials.Swap(index, lastIndex); + + // update the index of the handle we swapped with: + materialHandles[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: + materialHandles.RemoveAt(lastIndex); + collisionMaterials.count--; + + DestroyIfUnused(); + } + } + + public void UpdateColliders() + { + // update all colliders: + for (int i = 0; i < colliderHandles.Count; ++i) + colliderHandles[i].owner.UpdateIfNeeded(); +<<<<<<< HEAD +======= + + 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(); + } + } +>>>>>>> 56Hotfix + } + + public void UpdateRigidbodies(List solvers, float stepTime) + { + // reset all solver's delta buffers to zero: + foreach (ObiSolver solver in solvers) + { + if (solver != null) + { + 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) + { + // 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) count++; + + if (count > 0) + { + // we want to average the deltas applied by all solvers, so calculate 1/solverCount. + float rcpCount = 1.0f / count; + + for (int i = 0; i < rigidbodyHandles.Count; ++i) + { + Vector4 linearDelta = Vector4.zero; + Vector4 angularDelta = Vector4.zero; + + foreach (ObiSolver solver in solvers) + { + if (solver != null) + { + linearDelta += solver.rigidbodyLinearDeltas[i] * rcpCount; + angularDelta += solver.rigidbodyAngularDeltas[i] * rcpCount; + } + } + + // update rigidbody velocities + rigidbodyHandles[i].owner.UpdateVelocities(linearDelta, angularDelta); + } + } + } + + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs.orig.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs.orig.meta new file mode 100644 index 00000000..e1c169cd --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs.orig.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 663bb98786e3a46a3b909fa8d01073f2 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiCollisionMaterial.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiCollisionMaterial.cs new file mode 100644 index 00000000..97940be2 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiCollisionMaterial.cs @@ -0,0 +1,80 @@ +using UnityEngine; +using System; +using System.Collections; + +namespace Obi{ + + /** + * Holds information about the physics properties of a particle or collider, and how it should react to collisions. + */ + [CreateAssetMenu(fileName = "collision material", menuName = "Obi/Collision Material", order = 180)] + public class ObiCollisionMaterial : ScriptableObject + { + protected ObiCollisionMaterialHandle materialHandle; + + public float dynamicFriction; + public float staticFriction; + public float stickiness; + public float stickDistance; + + public Oni.MaterialCombineMode frictionCombine; + public Oni.MaterialCombineMode stickinessCombine; + + [Space] + public bool rollingContacts = false; + + [Indent()] + [VisibleIf("rollingContacts")] + public float rollingFriction; + + public ObiCollisionMaterialHandle handle + { + get + { + CreateMaterialIfNeeded(); + return materialHandle; + } + } + + private void OnEnable() + { + UpdateMaterial(); + } + + private void OnDisable() + { + ObiColliderWorld.GetInstance().DestroyCollisionMaterial(materialHandle); + } + + private void OnValidate() + { + // we can't create GameObjects in OnValidate(), so make sure the colliderworld already exists. + UpdateMaterial(); + } + + public void UpdateMaterial() + { + var world = ObiColliderWorld.GetInstance(); + var mat = world.collisionMaterials[handle.index]; + mat.FromObiCollisionMaterial(this); + world.collisionMaterials[handle.index] = mat; + } + + protected void CreateMaterialIfNeeded() + { + if (materialHandle == null || !materialHandle.isValid) + { + var world = ObiColliderWorld.GetInstance(); + + // create the material: + materialHandle = world.CreateCollisionMaterial(); + materialHandle.owner = this; + + // copy material data from this material (use materialHandle instead of handle, to not retrigger CreateMaterialIfNeeded) + var mat = world.collisionMaterials[materialHandle.index]; + mat.FromObiCollisionMaterial(this); + world.collisionMaterials[materialHandle.index] = mat; + } + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiCollisionMaterial.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiCollisionMaterial.cs.meta new file mode 100644 index 00000000..bf25cb7d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiCollisionMaterial.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5b9c84cdb747944209b1c8753933c5db +timeCreated: 1483360014 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: e101664ae1c454916896aaaa3199221c, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiDistanceField.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiDistanceField.cs new file mode 100644 index 00000000..3e5e315c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiDistanceField.cs @@ -0,0 +1,129 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Obi{ + + [CreateAssetMenu(fileName = "distance field", menuName = "Obi/Distance Field", order = 181)] + [ExecuteInEditMode] + public class ObiDistanceField : ScriptableObject + { + [SerializeProperty("InputMesh")] + [SerializeField] private Mesh input = null; + + [HideInInspector][SerializeField] private float minNodeSize = 0; + [HideInInspector][SerializeField] private Bounds bounds = new Bounds(); + [HideInInspector] public List nodes; /**< list of distance field nodes*/ + + [Range(0.0000001f,0.1f)] + public float maxError = 0.01f; + + [Range(1, 8)] + public int maxDepth = 5; + + public bool Initialized{ + get{return nodes != null;} + } + + public Bounds FieldBounds { + get{return bounds;} + } + + public float EffectiveSampleSize { + get{return minNodeSize;} + } + + public Mesh InputMesh{ + set{ + if (value != input){ + Reset(); + input = value; + } + } + get{return input;} + } + + public void Reset(){ + nodes = null; + if (input != null) + bounds = input.bounds; + } + + public IEnumerator Generate(){ + + Reset(); + + if (input == null) + yield break; + + int[] tris = input.triangles; + Vector3[] verts = input.vertices; + + nodes = new List(); + var buildingCoroutine = ASDF.Build(maxError, maxDepth, verts, tris, nodes); + + while (buildingCoroutine.MoveNext()) + yield return new CoroutineJob.ProgressInfo("Processed nodes: " + nodes.Count, 1); + + // calculate min node size; + minNodeSize = float.PositiveInfinity; + for (int j = 0; j < nodes.Count; ++j) + minNodeSize = Mathf.Min(minNodeSize, nodes[j].center[3] * 2); + + // get bounds: + float max = Mathf.Max(bounds.size[0], Mathf.Max(bounds.size[1], bounds.size[2])) + 0.2f; + bounds.size = new Vector3(max, max, max); + + } + + /** + * Return a volume texture containing a representation of this distance field. + */ + public Texture3D GetVolumeTexture(int size){ + + if (!Initialized) + return null; + + // upper bound of the distance from any point inside the bounds to the surface. + float maxDist = Mathf.Max(bounds.size.x,bounds.size.y,bounds.size.z); + + float spacingX = bounds.size.x / (float)size; + float spacingY = bounds.size.y / (float)size; + float spacingZ = bounds.size.z / (float)size; + + Texture3D tex = new Texture3D (size, size, size, TextureFormat.Alpha8, false); + + var cols = new Color[size*size*size]; + int idx = 0; + Color c = Color.black; + + for (int z = 0; z < size; ++z) + { + for (int y = 0; y < size; ++y) + { + for (int x = 0; x < size; ++x, ++idx) + { + Vector3 samplePoint = bounds.min + new Vector3(spacingX * x + spacingX*0.5f, + spacingY * y + spacingY*0.5f, + spacingZ * z + spacingZ*0.5f); + + float distance = ASDF.Sample(nodes,samplePoint); + + if (distance >= 0) + c.a = distance.Remap(0,maxDist*0.1f,0.5f,1); + else + c.a = distance.Remap(-maxDist*0.1f,0,0,0.5f); + + cols[idx] = c; + } + } + } + tex.SetPixels (cols); + tex.Apply (); + return tex; + + } + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiDistanceField.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiDistanceField.cs.meta new file mode 100644 index 00000000..9f068150 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiDistanceField.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d31207380edf34b1b84ce50af22f2356 +timeCreated: 1516041748 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: a83ed40096e3a40efa85f35b091e6298, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiDistanceFieldContainer.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiDistanceFieldContainer.cs new file mode 100644 index 00000000..9d6fde09 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiDistanceFieldContainer.cs @@ -0,0 +1,103 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace Obi +{ + + public class ObiDistanceFieldHandle : ObiResourceHandle + { + public ObiDistanceFieldHandle(ObiDistanceField field, int index = -1) : base(index) { owner = field; } + } + + public struct DistanceFieldHeader //we need to use the header in the backend, so it must be a struct. + { + public int firstNode; + public int nodeCount; + + public DistanceFieldHeader(int firstNode, int nodeCount) + { + this.firstNode = firstNode; + this.nodeCount = nodeCount; + } + } + + public class ObiDistanceFieldContainer + { + public Dictionary handles; /**< dictionary indexed by asset, so that we don't generate data for the same distance field multiple times.*/ + + public ObiNativeDistanceFieldHeaderList headers; /**< One header per distance field.*/ + public ObiNativeDFNodeList dfNodes; + + public ObiDistanceFieldContainer() + { + handles = new Dictionary(); + headers = new ObiNativeDistanceFieldHeaderList(); + dfNodes = new ObiNativeDFNodeList(); + } + + public ObiDistanceFieldHandle GetOrCreateDistanceField(ObiDistanceField source) + { + ObiDistanceFieldHandle handle; + + if (!handles.TryGetValue(source, out handle)) + { + + handle = new ObiDistanceFieldHandle(source, headers.count); + handles.Add(source, handle); + headers.Add(new DistanceFieldHeader(dfNodes.count, source.nodes.Count)); + + dfNodes.AddRange(source.nodes); + } + + return handle; + } + + public void DestroyDistanceField(ObiDistanceFieldHandle handle) + { + if (handle != null && handle.isValid && handle.index < handles.Count) + { + var header = headers[handle.index]; + + // Update headers: + for (int i = 0; i < headers.count; ++i) + { + var h = headers[i]; + if (h.firstNode > header.firstNode) + { + h.firstNode -= header.nodeCount; + headers[i] = h; + } + } + + // update handles: + foreach (var pair in handles) + { + if (pair.Value.index > handle.index) + pair.Value.index--; + } + + // Remove nodes + dfNodes.RemoveRange(header.firstNode, header.nodeCount); + + // remove header: + headers.RemoveAt(handle.index); + + // remove the mesh from the dictionary: + handles.Remove(handle.owner); + + // Invalidate our handle: + handle.Invalidate(); + } + } + + public void Dispose() + { + if (headers != null) + headers.Dispose(); + if (dfNodes != null) + dfNodes.Dispose(); + } + + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiDistanceFieldContainer.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiDistanceFieldContainer.cs.meta new file mode 100644 index 00000000..6d49dbfd --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiDistanceFieldContainer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e8fb69dfa0ce5432d83da86e05e31e12 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiEdgeMeshContainer.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiEdgeMeshContainer.cs new file mode 100644 index 00000000..d4bc3e7e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiEdgeMeshContainer.cs @@ -0,0 +1,163 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace Obi +{ + public struct Edge : IBounded + { + public int i1; + public int i2; + + Aabb b; + + public Edge(int i1, int i2, Vector2 v1, Vector2 v2) + { + this.i1 = i1; + this.i2 = i2; + b = new Aabb(v1); + b.Encapsulate(v2); + } + + public Aabb GetBounds() + { + return b; + } + } + + public class ObiEdgeMeshHandle : ObiResourceHandle + { + public ObiEdgeMeshHandle(EdgeCollider2D collider, int index = -1) : base(index) { owner = collider; } + } + + public struct EdgeMeshHeader + { + public int firstNode; + public int nodeCount; + public int firstEdge; + public int edgeCount; + public int firstVertex; + public int vertexCount; + + public EdgeMeshHeader(int firstNode, int nodeCount, int firstTriangle, int triangleCount, int firstVertex, int vertexCount) + { + this.firstNode = firstNode; + this.nodeCount = nodeCount; + this.firstEdge = firstTriangle; + this.edgeCount = triangleCount; + this.firstVertex = firstVertex; + this.vertexCount = vertexCount; + } + } + + public class ObiEdgeMeshContainer + { + public Dictionary handles; /**< dictionary indexed by mesh, so that we don't generate data for the same mesh multiple times.*/ + + public ObiNativeEdgeMeshHeaderList headers; + public ObiNativeBIHNodeList bihNodes; + public ObiNativeEdgeList edges; + public ObiNativeVector2List vertices; + + public ObiEdgeMeshContainer() + { + handles = new Dictionary(); + headers = new ObiNativeEdgeMeshHeaderList(); + bihNodes = new ObiNativeBIHNodeList(); + edges = new ObiNativeEdgeList(); + vertices = new ObiNativeVector2List(); + } + + public ObiEdgeMeshHandle GetOrCreateEdgeMesh(EdgeCollider2D source) + { + ObiEdgeMeshHandle handle; + + if (!handles.TryGetValue(source, out handle)) + { + Vector2[] sourceVertices = source.points; + int[] sourceEdges = new int[source.edgeCount * 2]; + + for (int i = 0; i < source.edgeCount; ++i) + { + sourceEdges[i * 2] = i; + sourceEdges[i * 2 + 1] = i + 1; + } + + // Build a bounding interval hierarchy from the edges: + IBounded[] t = new IBounded[source.edgeCount]; + for (int i = 0; i < source.edgeCount; ++i) + { + t[i] = new Edge(i, i+1, sourceVertices[i], sourceVertices[i+1]); + } + var sourceBih = BIH.Build(ref t); + + Edge[] edgs = Array.ConvertAll(t, x => (Edge)x); + + handle = new ObiEdgeMeshHandle(source, headers.count); + handles.Add(source, handle); + headers.Add(new EdgeMeshHeader(bihNodes.count, sourceBih.Length, edges.count, edgs.Length, vertices.count, sourceVertices.Length)); + + bihNodes.AddRange(sourceBih); + edges.AddRange(edgs); + vertices.AddRange(sourceVertices); + } + + return handle; + } + + public void DestroyEdgeMesh(ObiEdgeMeshHandle handle) + { + if (handle != null && handle.isValid && handle.index < handles.Count) + { + var header = headers[handle.index]; + + // Update headers: + for (int i = 0; i < headers.count; ++i) + { + var h = headers[i]; + if (h.firstEdge > header.firstEdge) + { + h.firstNode -= header.nodeCount; + h.firstEdge -= header.edgeCount; + h.firstVertex -= header.vertexCount; + headers[i] = h; + } + } + + // update handles: + foreach (var pair in handles) + { + if (pair.Value.index > handle.index) + pair.Value.index--; + } + + // Remove nodes, triangles and vertices + bihNodes.RemoveRange(header.firstNode, header.nodeCount); + edges.RemoveRange(header.firstEdge, header.edgeCount); + vertices.RemoveRange(header.firstVertex, header.vertexCount); + + // remove header: + headers.RemoveAt(handle.index); + + // remove the collider from the dictionary: + handles.Remove(handle.owner); + + // Invalidate our handle: + handle.Invalidate(); + } + } + + public void Dispose() + { + if (headers != null) + headers.Dispose(); + if (edges != null) + edges.Dispose(); + if (vertices != null) + vertices.Dispose(); + if (bihNodes != null) + bihNodes.Dispose(); + } + + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiEdgeMeshContainer.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiEdgeMeshContainer.cs.meta new file mode 100644 index 00000000..8e1c4df1 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiEdgeMeshContainer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 26d97a1797c5d43a69fc77f77c37a3b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiHeightFieldContainer.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiHeightFieldContainer.cs new file mode 100644 index 00000000..75131e75 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiHeightFieldContainer.cs @@ -0,0 +1,114 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace Obi +{ + public class ObiHeightFieldHandle : ObiResourceHandle + { + public ObiHeightFieldHandle(TerrainData data, int index = -1) : base(index) { owner = data; } + } + + public struct HeightFieldHeader //we need to use the header in the backend, so it must be a struct. + { + public int firstSample; + public int sampleCount; + + public HeightFieldHeader(int firstSample, int sampleCount) + { + this.firstSample = firstSample; + this.sampleCount = sampleCount; + } + } + + public class ObiHeightFieldContainer + { + public Dictionary handles; /**< dictionary indexed by asset, so that we don't generate data for the same distance field multiple times.*/ + + public ObiNativeHeightFieldHeaderList headers; /**< One header per distance field.*/ + public ObiNativeFloatList samples; + + public ObiHeightFieldContainer() + { + handles = new Dictionary(); + headers = new ObiNativeHeightFieldHeaderList(); + samples = new ObiNativeFloatList(); + } + + public ObiHeightFieldHandle GetOrCreateHeightField(TerrainData source) + { + ObiHeightFieldHandle handle; + + if (!handles.TryGetValue(source, out handle)) + { + // Get the heighfield into a 1d array: + int width = source.heightmapResolution; + int height = source.heightmapResolution; + + float[,] heights = source.GetHeights(0, 0, width, height); + bool[,] holes = source.GetHoles(0, 0, width-1, height-1); + + float[] buffer = new float[width * height]; + + for (int y = 0; y < height; ++y) + for (int x = 0; x < width; ++x) + buffer[y * width + x] = heights[y, x] * (holes[Mathf.Min(y,height - 2), Mathf.Min(x, width - 2)] ? 1:-1); + + handle = new ObiHeightFieldHandle(source, headers.count); + handles.Add(source, handle); + headers.Add(new HeightFieldHeader(samples.count, buffer.Length)); + + samples.AddRange(buffer); + } + + return handle; + } + + public void DestroyHeightField(ObiHeightFieldHandle handle) + { + if (handle != null && handle.isValid && handle.index < handles.Count) + { + var header = headers[handle.index]; + + // Update headers: + for (int i = 0; i < headers.count; ++i) + { + var h = headers[i]; + if (h.firstSample > header.firstSample) + { + h.firstSample -= header.sampleCount; + headers[i] = h; + } + } + + // update handles: + foreach (var pair in handles) + { + if (pair.Value.index > handle.index) + pair.Value.index--; + } + + // Remove nodes + samples.RemoveRange(header.firstSample, header.sampleCount); + + // remove header: + headers.RemoveAt(handle.index); + + // remove the heightfield from the dictionary: + handles.Remove(handle.owner); + + // Invalidate our handle: + handle.Invalidate(); + } + } + + public void Dispose() + { + if (headers != null) + headers.Dispose(); + if (samples != null) + samples.Dispose(); + } + + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiHeightFieldContainer.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiHeightFieldContainer.cs.meta new file mode 100644 index 00000000..4a72e5c5 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiHeightFieldContainer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 144f4377b36f741b3af30c9ff572733f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody.cs new file mode 100644 index 00000000..d66ab8c0 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody.cs @@ -0,0 +1,101 @@ +using UnityEngine; +using System; +using System.Collections; + +namespace Obi{ + + /** + * Small helper class that lets you specify Obi-only properties for rigidbodies. + */ + + [ExecuteInEditMode] + [RequireComponent(typeof(Rigidbody))] + public class ObiRigidbody : ObiRigidbodyBase + { + public Rigidbody unityRigidbody { get; private set; } + + public Vector3 position => unityRigidbody.position; + public Quaternion rotation => unityRigidbody.rotation; + + public Vector3 linearVelocity { get; protected set; } + public Vector3 angularVelocity { get; protected set; } + + private Quaternion prevRotation; + private Vector3 prevPosition; + + protected override void OnEnable() + { + unityRigidbody = GetComponent(); + ResetPosition(); + base.OnEnable(); + } + + public void ResetPosition() + { + prevPosition = unityRigidbody.position; + prevRotation = unityRigidbody.rotation; + linearVelocity = unityRigidbody.velocity; + angularVelocity = unityRigidbody.angularVelocity; + } + + private void CacheVelocities(float stepTime) + { + // differentiate positions/orientations to get our own velocites for kinematic objects. + // also useful for animations. + if (unityRigidbody.isKinematic && stepTime > 0) + { + // differentiate positions to obtain linear velocity: + linearVelocity = (unityRigidbody.position - prevPosition) / stepTime; + + // differentiate rotations to obtain angular velocity: + Quaternion delta = unityRigidbody.rotation * Quaternion.Inverse(prevRotation); + angularVelocity = new Vector3(delta.x, delta.y, delta.z) * 2.0f / stepTime; + } + else + { + // if the object is non-kinematic, just copy velocities. + linearVelocity = unityRigidbody.velocity; + angularVelocity = unityRigidbody.angularVelocity; + } + + prevPosition = unityRigidbody.position; + prevRotation = unityRigidbody.rotation; + } + + public override void UpdateIfNeeded(float 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]; + rb.FromRigidbody(this); + world.rigidbodies[handle.index] = rb; + } + + /** + * Reads velocities back from the solver. + */ + 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)) + { + if (Vector3.SqrMagnitude(linearDelta) > 0.00001f || Vector3.SqrMagnitude(angularDelta) > 0.00001f) + { + unityRigidbody.velocity += linearDelta; + unityRigidbody.angularVelocity += angularDelta; + } + } + } + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody.cs.meta new file mode 100644 index 00000000..7a15a80f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 62359d80fdc0e4315ab6331b78ec5b90 +timeCreated: 1502137073 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 1788ce7c914374d949486d9789c9f306, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody2D.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody2D.cs new file mode 100644 index 00000000..4c5feec7 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody2D.cs @@ -0,0 +1,98 @@ +using UnityEngine; +using System; +using System.Collections; + +namespace Obi{ + + /** + * Small helper class that lets you specify Obi-only properties for rigidbodies. + */ + + [ExecuteInEditMode] + [RequireComponent(typeof(Rigidbody2D))] + public class ObiRigidbody2D : ObiRigidbodyBase + { + public Rigidbody2D unityRigidbody { get; private set; } + + public Vector2 position => unityRigidbody.position; + public float rotation => unityRigidbody.rotation; + + public Vector2 linearVelocity { get; protected set; } + public float angularVelocity { get; protected set; } + + private Quaternion prevRotation; + private Vector3 prevPosition; + + protected override void OnEnable() + { + unityRigidbody = GetComponent(); + ResetPosition(); + base.OnEnable(); + } + + public void ResetPosition() + { + prevPosition = unityRigidbody.position; + prevRotation = Quaternion.AngleAxis(unityRigidbody.rotation, Vector3.forward); + linearVelocity = unityRigidbody.velocity; + 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 && stepTime > 0) + { + // differentiate positions to obtain linear velocity: + linearVelocity = (transform.position - prevPosition) / stepTime; + + // differentiate rotations to obtain angular velocity: + Quaternion delta = transform.rotation * Quaternion.Inverse(prevRotation); + angularVelocity = delta.z * Mathf.Rad2Deg * 2.0f / stepTime; + } + else + { + // if the object is non-kinematic, just copy velocities. + linearVelocity = unityRigidbody.velocity; + angularVelocity = unityRigidbody.angularVelocity; + } + + prevPosition = transform.position; + prevRotation = transform.rotation; + } + + public override void UpdateIfNeeded(float 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]; + rb.FromRigidbody(this); + world.rigidbodies[handle.index] = rb; + } + + /** + * Reads velocities back from the solver. + */ + 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.velocity += new Vector2(linearDelta.x, linearDelta.y); + unityRigidbody.angularVelocity += angularDelta[2] * Mathf.Rad2Deg; + } + + } + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody2D.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody2D.cs.meta new file mode 100644 index 00000000..8b4dbc1d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody2D.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d8e1dfa1dce354ed499bfb5d2b1cd799 +timeCreated: 1517939164 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 21e01eb398ab24a7abb1f3b493af6b20, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiRigidbodyBase.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiRigidbodyBase.cs new file mode 100644 index 00000000..55c5d15d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiRigidbodyBase.cs @@ -0,0 +1,55 @@ +using UnityEngine; +using Unity.Profiling; +using System; +using System.Collections; + +namespace Obi{ + + /** + * Small helper class that lets you specify Obi-only properties for rigidbodies. + */ + + [ExecuteInEditMode] + public abstract class ObiRigidbodyBase : MonoBehaviour + { + + public bool kinematicForParticles = false; + + protected ObiRigidbodyHandle rigidbodyHandle; + public ObiRigidbodyHandle handle + { + get + { + if (rigidbodyHandle == null || !rigidbodyHandle.isValid) + { + var world = ObiColliderWorld.GetInstance(); + + // create the material: + rigidbodyHandle = world.CreateRigidbody(); + rigidbodyHandle.owner = this; + } + return rigidbodyHandle; + } + } + + protected virtual void OnEnable() + { + //handle = ObiColliderWorld.GetInstance().CreateRigidbody(); + //handle.owner = this; + } + + public void OnDisable() + { + ObiColliderWorld.GetInstance().DestroyRigidbody(handle); + } + + public abstract void UpdateIfNeeded(float stepTime); + + /** + * Reads velocities back from the solver. + */ + public abstract void UpdateVelocities(Vector3 linearDelta, Vector3 angularDelta); + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiRigidbodyBase.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiRigidbodyBase.cs.meta new file mode 100644 index 00000000..0e3cab7c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiRigidbodyBase.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8f0adb129c9cf4d978dc5964711503b8 +timeCreated: 1516131526 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiTriangleMeshContainer.cs b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiTriangleMeshContainer.cs new file mode 100644 index 00000000..3858bc69 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiTriangleMeshContainer.cs @@ -0,0 +1,171 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace Obi +{ + public struct Triangle : IBounded + { + public int i1; + public int i2; + public int i3; + + Aabb b; + + public Triangle(int i1, int i2, int i3, Vector3 v1, Vector3 v2, Vector3 v3) + { + this.i1 = i1; + this.i2 = i2; + this.i3 = i3; + b = new Aabb(v1); + b.Encapsulate(v2); + b.Encapsulate(v3); + } + + public Aabb GetBounds() + { + return b; + } + } + + public class ObiTriangleMeshHandle : ObiResourceHandle + { + public ObiTriangleMeshHandle(Mesh mesh, int index = -1) : base(index) { owner = mesh; } + } + + public struct TriangleMeshHeader //we need to use the header in the backend, so it must be a struct. + { + public int firstNode; + public int nodeCount; + public int firstTriangle; + public int triangleCount; + public int firstVertex; + public int vertexCount; + + public TriangleMeshHeader(int firstNode, int nodeCount, int firstTriangle, int triangleCount, int firstVertex, int vertexCount) + { + this.firstNode = firstNode; + this.nodeCount = nodeCount; + this.firstTriangle = firstTriangle; + this.triangleCount = triangleCount; + this.firstVertex = firstVertex; + this.vertexCount = vertexCount; + } + } + + public class ObiTriangleMeshContainer + { + public Dictionary handles; /**< dictionary indexed by mesh, so that we don't generate data for the same mesh multiple times.*/ + + public ObiNativeTriangleMeshHeaderList headers; /**< One header per mesh.*/ + public ObiNativeBIHNodeList bihNodes; + public ObiNativeTriangleList triangles; + public ObiNativeVector3List vertices; + + public ObiTriangleMeshContainer() + { + handles = new Dictionary(); + headers = new ObiNativeTriangleMeshHeaderList(); + bihNodes = new ObiNativeBIHNodeList(); + triangles = new ObiNativeTriangleList(); + vertices = new ObiNativeVector3List(); + } + + public ObiTriangleMeshHandle GetOrCreateTriangleMesh(Mesh source) + { + ObiTriangleMeshHandle handle = new ObiTriangleMeshHandle(null); + + if (source != null && !handles.TryGetValue(source, out handle)) + { + if (source.isReadable) + { + 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); + } + } + + return handle; + } + + public void DestroyTriangleMesh(ObiTriangleMeshHandle handle) + { + if (handle != null && handle.isValid && handle.index < handles.Count) + { + var header = headers[handle.index]; + + // Update headers: + for (int i = 0; i < headers.count; ++i) + { + var h = headers[i]; + if (h.firstTriangle > header.firstTriangle) + { + h.firstNode -= header.nodeCount; + h.firstTriangle -= header.triangleCount; + h.firstVertex -= header.vertexCount; + headers[i] = h; + } + } + + // update handles: + foreach (var pair in handles) + { + if (pair.Value.index > handle.index) + pair.Value.index --; + } + + // Remove nodes, triangles and vertices + bihNodes.RemoveRange(header.firstNode, header.nodeCount); + triangles.RemoveRange(header.firstTriangle, header.triangleCount); + vertices.RemoveRange(header.firstVertex, header.vertexCount); + + // remove header: + headers.RemoveAt(handle.index); + + // remove the mesh from the dictionary: + handles.Remove(handle.owner); + + // Invalidate our handle: + handle.Invalidate(); + } + } + + public void Dispose() + { + if (headers != null) + headers.Dispose(); + if (triangles != null) + triangles.Dispose(); + if (vertices != null) + vertices.Dispose(); + if (bihNodes != null) + bihNodes.Dispose(); + } + + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiTriangleMeshContainer.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiTriangleMeshContainer.cs.meta new file mode 100644 index 00000000..a92add22 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Collisions/ObiTriangleMeshContainer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce6cc2e74afba4793acd378425158828 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures.meta new file mode 100644 index 00000000..2c79eb3b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c8768fedc0fc14bb484c2289f4d7b6c9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ASDF.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ASDF.meta new file mode 100644 index 00000000..2ccf1cd0 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ASDF.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 645b177bec2c444aaa188661f611418a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ASDF/ASDF.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ASDF/ASDF.cs new file mode 100644 index 00000000..3573506c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ASDF/ASDF.cs @@ -0,0 +1,187 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Obi +{ + public class ASDF + { + static readonly Vector4[] corners = + { + new Vector4(-1,-1,-1,-1), + new Vector4(-1,-1,1,-1), + new Vector4(-1,1,-1,-1), + new Vector4(-1,1,1,-1), + + new Vector4(1,-1,-1,-1), + new Vector4(1,-1,1,-1), + new Vector4(1,1,-1,-1), + new Vector4(1,1,1,-1) + }; + + static readonly Vector4[] samples = + { + new Vector4(0,0,0,0), + new Vector4(1,0,0,0), + new Vector4(-1,0,0,0), + new Vector4(0,1,0,0), + new Vector4(0,-1,0,0), + new Vector4(0,0,1,0), + new Vector4(0,0,-1,0), + + new Vector4(0,-1,-1,0), + new Vector4(0,-1,1,0), + new Vector4(0,1,-1,0), + new Vector4(0,1,1,0), + + new Vector4(-1,0,-1,0), + new Vector4(-1,0,1,0), + new Vector4(1,0,-1,0), + new Vector4(1,0,1,0), + + new Vector4(-1,-1,0,0), + new Vector4(-1,1,0,0), + new Vector4(1,-1,0,0), + new Vector4(1,1,0,0) + }; + + const float sqrt3 = 1.73205f; + + public static IEnumerator Build(float maxError, int maxDepth, Vector3[] vertexPositions, int[] triangleIndices, List nodes, int yieldAfterNodeCount = 32) + { + // Empty vertex or triangle lists, return. + if (maxDepth <= 0 || + nodes == null || + vertexPositions == null || vertexPositions.Length == 0 || + triangleIndices == null || triangleIndices.Length == 0) + yield break; + + // Build a bounding interval hierarchy from the triangles, to speed up distance queries: + IBounded[] t = new IBounded[triangleIndices.Length / 3]; + for (int i = 0; i < t.Length; ++i) + { + int t1 = triangleIndices[i * 3]; + int t2 = triangleIndices[i * 3 + 1]; + int t3 = triangleIndices[i * 3 + 2]; + t[i] = new Triangle(t1, t2, t3, vertexPositions[t1], vertexPositions[t2], vertexPositions[t3]); + } + var bih = BIH.Build(ref t); + + // Copy reordered triangles over to a new array: + Triangle[] tris = Array.ConvertAll(t, x => (Triangle)x); + + // Build angle weighted normals, used to determine the sign of the distance field. + Vector3[] angleNormals = ObiUtils.CalculateAngleWeightedNormals(vertexPositions,triangleIndices); + + // Calculate bounding box of the mesh: + Bounds bounds = new Bounds(vertexPositions[0], Vector3.zero); + for (int i = 1; i < vertexPositions.Length; ++i) + bounds.Encapsulate(vertexPositions[i]); + + bounds.Expand(0.2f); + + // Auxiliar variables to keep track of current tree depth: + int depth = 0; + int nodesToNextLevel = 1; + + // Initialize node list: + Vector4 center = bounds.center; + Vector3 boundsExtents = bounds.extents; + center[3] = Mathf.Max(boundsExtents[0], Math.Max(boundsExtents[1], boundsExtents[2])); + nodes.Clear(); + nodes.Add(new DFNode(center)); + + + var queue = new Queue(); + queue.Enqueue(0); + + int processedNodeCount = 0; + while (queue.Count > 0) + { + // get current node: + int index = queue.Dequeue(); + var node = nodes[index]; + + // measure distance at the 8 node corners: + for (int i = 0; i < 8; ++i) + { + Vector4 point = node.center + corners[i] * node.center[3]; + point[3] = 0; + float distance = BIH.DistanceToSurface(bih, tris, vertexPositions,angleNormals,point); + + if (i < 4) + node.distancesA[i] = distance; + else + node.distancesB[i - 4] = distance; + } + + // only subdivide those nodes intersecting the surface: + if (depth < maxDepth && Mathf.Abs(BIH.DistanceToSurface(bih, tris, vertexPositions, angleNormals, node.center)) < node.center[3] * sqrt3) + { + + // calculate mean squared error between measured distances and interpolated ones: + float mse = 0; + for (int i = 0; i < samples.Length; ++i) + { + Vector4 point = node.center + samples[i] * node.center[3]; + float groundTruth = BIH.DistanceToSurface(bih, tris, vertexPositions, angleNormals, point); + float estimation = node.Sample(point); + float d = groundTruth - estimation; + mse += d * d; + } + mse /= (float)samples.Length; + + // if error > threshold, subdivide the node: + if (mse > maxError) + { + node.firstChild = nodes.Count; + for (int i = 0; i < 8; ++i) + { + queue.Enqueue(nodes.Count); + nodes.Add(new DFNode(node.center + corners[i] * node.center[3] * 0.5f)); + } + } + + // keep track of current depth: + if (--nodesToNextLevel == 0) + { + depth++; + nodesToNextLevel = queue.Count; + } + } + + // feed the modified node back: + nodes[index] = node; + + // if we've processed enough nodes, yield. + if (nodes.Count - processedNodeCount >= yieldAfterNodeCount) + { + processedNodeCount = nodes.Count; + yield return null; + } + } + } + + public static float Sample(List nodes, Vector3 position) + { + if (nodes != null && nodes.Count > 0) + { + var queue = new Queue(); + queue.Enqueue(0); + + while (queue.Count > 0) + { + // get current node: + var node = nodes[queue.Dequeue()]; + + if (node.firstChild > -1) + queue.Enqueue(node.firstChild + node.GetOctant(position)); + else + return node.Sample(position); + } + } + return 0; + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ASDF/ASDF.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ASDF/ASDF.cs.meta new file mode 100644 index 00000000..d51108ac --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ASDF/ASDF.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6951f2457b77d4daf9f257e128b6dfb2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ASDF/DFNode.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ASDF/DFNode.cs new file mode 100644 index 00000000..31892a9e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ASDF/DFNode.cs @@ -0,0 +1,66 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public struct DFNode + { + public Vector4 distancesA; + public Vector4 distancesB; + public Vector4 center; + 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) + { + this.distancesA = Vector4.zero; + this.distancesB = Vector4.zero; + this.center = center; + this.firstChild = -1; + this.pad0 = 0; + this.pad1 = 0; + this.pad2 = 0; + } + + public float Sample(Vector3 position) + { + Vector3 nPos = GetNormalizedPos(position); + + // trilinear interpolation: interpolate along x axis + Vector4 x = distancesA + (distancesB - distancesA) * nPos[0]; + + // interpolate along y axis + float y0 = x[0] + (x[2] - x[0]) * nPos[1]; + float y1 = x[1] + (x[3] - x[1]) * nPos[1]; + + // interpolate along z axis. + return y0 + (y1 - y0) * nPos[2]; + } + + public Vector3 GetNormalizedPos(Vector3 position) + { + float size = center[3] * 2; + return new Vector3( + (position[0] - (center[0] - center[3])) / size, + (position[1] - (center[1] - center[3])) / size, + (position[2] - (center[2] - center[3])) / size + ); + } + + public int GetOctant(Vector3 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; + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ASDF/DFNode.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ASDF/DFNode.cs.meta new file mode 100644 index 00000000..17405a2c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ASDF/DFNode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 769e6e9ced39347bc96146f1858ab648 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Aabb.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Aabb.cs new file mode 100644 index 00000000..0ab75766 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Aabb.cs @@ -0,0 +1,53 @@ +using UnityEngine; + +namespace Obi +{ + public struct Aabb + { + public Vector4 min; + public Vector4 max; + + public Vector4 center + { + get { return min + (max - min) * 0.5f; } + } + + public Vector4 size + { + get { return max - min; } + } + + public Aabb(Vector4 min, Vector4 max) + { + this.min = min; + this.max = max; + } + + public Aabb(Vector4 point) + { + this.min = point; + this.max = point; + } + + public void Encapsulate(Vector4 point) + { + min = Vector4.Min(min, point); + max = Vector4.Max(max, point); + } + + public void Encapsulate(Aabb other) + { + min = Vector4.Min(min, other.min); + max = Vector4.Max(max, other.max); + } + + public void FromBounds(Bounds bounds, float thickness, bool is2D = false) + { + Vector3 s = Vector3.one * thickness; + min = bounds.min - s; + max = bounds.max + s; + if (is2D) + max[2] = min[2] = 0; + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Aabb.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Aabb.cs.meta new file mode 100644 index 00000000..242d31dd --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Aabb.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b6d58d9b0a8a4f7ea09067526d713cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/AffineTransform.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/AffineTransform.cs new file mode 100644 index 00000000..e129482e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/AffineTransform.cs @@ -0,0 +1,65 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public struct AffineTransform + { + public Vector4 translation; + public Vector4 scale; + public Quaternion rotation; + + public AffineTransform(Vector4 translation, Quaternion rotation, Vector4 scale) + { + // make sure there are good values in the 4th component: + translation[3] = 0; + scale[3] = 1; + + this.translation = translation; + this.rotation = rotation; + this.scale = scale; + } + + public void FromTransform3D(Transform source, ObiRigidbody rb) + { + if (rb != null && rb.unityRigidbody != null) + { + 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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/AffineTransform.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/AffineTransform.cs.meta new file mode 100644 index 00000000..b15e7adc --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/AffineTransform.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c8eff617709c457a85387e2f72187aa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/BVH.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/BVH.meta new file mode 100644 index 00000000..4dd39cc2 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/BVH.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3d141c0731e7c43e8be29d786670298c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/BVH/BIH.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/BVH/BIH.cs new file mode 100644 index 00000000..c770ed38 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/BVH/BIH.cs @@ -0,0 +1,262 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace Obi +{ + public class BIH + { + public static BIHNode[] Build(ref IBounded[] elements, int maxDepth = 10, float maxOverlap = 0.7f) + { + List nodes = new List{ new BIHNode(0, elements.Length) }; + + // auxiliar variables to keep track of current tree depth: + int depth = 0; + int nodesToNextLevel = 1; + + var queue = new Queue(); + queue.Enqueue(0); + + while (queue.Count > 0) + { + // get current node: + int index = queue.Dequeue(); + var node = nodes[index]; + + // if this node contains enough elements, split it: + if (node.count > 2) + { + int start = node.start; + int end = start + (node.count - 1); + + // calculate bounding box of all elements: + Aabb b = elements[start].GetBounds(); + for (int k = start + 1; k <= end; ++k) + b.Encapsulate(elements[k].GetBounds()); + + // determine split axis (longest one): + Vector3 size = b.size; + int axis = node.axis = (size.x > size.y) ? + (size.x > size.z ? 0 : 2) : + (size.y > size.z ? 1 : 2); + + // place split plane at half the longest axis: + float pivot = b.min[axis] + size[axis] * 0.5f; + + // partition elements according to which side of the split plane they're at: + int j = HoarePartition(elements, start, end, pivot, ref node, axis); + + // create two child nodes: + var minChild = new BIHNode(start, j - start + 1); + var maxChild = new BIHNode(j + 1, end - j); + + // calculate child overlap: + float overlap = size[axis] > 0 ? Mathf.Max(node.min - node.max, 0) / size[axis] : 1; + + // guard against cases where all elements are on one side of the split plane, + // due to all having the same or very similar bounds as the entire group. + if (overlap <= maxOverlap && minChild.count > 0 && maxChild.count > 0) + { + node.firstChild = nodes.Count; + nodes[index] = node; + + queue.Enqueue(nodes.Count); + queue.Enqueue(nodes.Count + 1); + + // append child nodes to list: + nodes.Add(minChild); + nodes.Add(maxChild); + } + + // keep track of current depth: + if (--nodesToNextLevel == 0) + { + depth++; + if (depth >= maxDepth) + return nodes.ToArray(); + nodesToNextLevel = queue.Count; + } + } + } + return nodes.ToArray(); + } + + public static int HoarePartition(IBounded[] elements, int start, int end, float pivot, ref BIHNode node, int axis) + { + int i = start; + int j = end; + + while (i <= j) + { + while (i < end && elements[i].GetBounds().center[axis] < pivot) + node.min = Mathf.Max(node.min, elements[i++].GetBounds().max[axis]); + + while (j > start && elements[j].GetBounds().center[axis] > pivot) + node.max = Mathf.Min(node.max, elements[j--].GetBounds().min[axis]); + + if (i <= j) + { + node.min = Mathf.Max(node.min, elements[j].GetBounds().max[axis]); + node.max = Mathf.Min(node.max, elements[i].GetBounds().min[axis]); + ObiUtils.Swap(ref elements[i++], ref elements[j--]); + } + } + + return j; + } + + public static float DistanceToSurface(Triangle[] triangles, + Vector3[] vertices, + Vector3[] normals, + in BIHNode node, + in Vector3 point) + { + float minDistance = float.MaxValue; + int sign = 1; + + Vector3 pointOnTri; + Vector3 interpolatedNormal; + + for (int i = node.start; i < node.start + node.count; ++i) + { + Triangle t = triangles[i]; + + + ObiUtils.NearestPointOnTri(in vertices[t.i1], + in vertices[t.i2], + in vertices[t.i3], + in point, + out pointOnTri); + + Vector3 pointToTri = point - pointOnTri; + float sqrDistance = pointToTri.sqrMagnitude; + + if (sqrDistance < minDistance) + { + Vector3 bary = Vector3.zero; + ObiUtils.BarycentricCoordinates(in vertices[t.i1], in vertices[t.i2], in vertices[t.i3], in pointOnTri, ref bary); + ObiUtils.BarycentricInterpolation(in normals[t.i1], + in normals[t.i2], + in normals[t.i3], + in bary, + out interpolatedNormal); + + sign = ObiUtils.PureSign(pointToTri.x * interpolatedNormal.x + + pointToTri.y * interpolatedNormal.y + + pointToTri.z * interpolatedNormal.z); + + minDistance = sqrDistance; + } + } + + return Mathf.Sqrt(minDistance) * sign; + } + + public static float DistanceToSurface(BIHNode[] nodes, + Triangle[] triangles, + Vector3[] vertices, + Vector3[] normals, + in Vector3 point) + { + + if (nodes.Length > 0) + return DistanceToSurface(nodes, triangles, vertices, normals, in nodes[0], in point); + + return float.MaxValue; + } + + public static float DistanceToSurface(BIHNode[] nodes, + Triangle[] triangles, + Vector3[] vertices, + Vector3[] normals, + in BIHNode node, + in Vector3 point) + { + + float MinSignedDistance(float d1, float d2) + { + return (Mathf.Abs(d1) < Mathf.Abs(d2)) ? d1 : d2; + } + + if (node.firstChild >= 0) + { + /** + * If the current node is not a leaf, figure out which side of the split plane that contains the query point, and recurse down that side. + * You will get the index and distance to the closest triangle in that subtree. + * Then, check if the distance to the nearest triangle is closer to the query point than the distance between the query point and the split plane. + * If it is closer, there is no need to recurse down the other side of the KD tree and you can just return. + * Otherwise, you will need to recurse down the other way too, and return whichever result is closer. + */ + + float si = float.MaxValue; + float p = point[node.axis]; + + // child nodes overlap: + if (node.min > node.max) + { + // CASE 1: we are in the overlapping zone: recurse down both. + if (p <= node.min && p >= node.max) + { + si = MinSignedDistance(DistanceToSurface(nodes, triangles, vertices, normals, in nodes[node.firstChild], in point), + DistanceToSurface(nodes, triangles, vertices, normals, in nodes[node.firstChild + 1], in point)); + } + // CASE 2: to the right of left pivot, that is: in the right child only. + else if (p > node.min) + { + si = DistanceToSurface(nodes, triangles, vertices, normals, in nodes[node.firstChild + 1], in point); + + // only recurse down left child if nearest surface in right child is furthest than left pivot. + if (Mathf.Abs(si) > Mathf.Abs(p - node.min)) + si = MinSignedDistance(si, DistanceToSurface(nodes, triangles, vertices, normals, in nodes[node.firstChild], in point)); + } + // CASE 3: to the left of right pivot, that is: in the left child only. + else + { + si = DistanceToSurface(nodes, triangles, vertices, normals, nodes[node.firstChild], point); + + // only recurse down left child if nearest surface in right child is furthest than left pivot. + if (Mathf.Abs(si) > Mathf.Abs(node.max - p)) + si = MinSignedDistance(si, DistanceToSurface(nodes, triangles, vertices, normals, in nodes[node.firstChild + 1], in point)); + } + } + // child nodes do not overlap + else + { + // CASE 4: we are in the middle. just pick up one child (I chose right), get minimum, and if the other child pivot is nearer, recurse down it too. + // Just like case 2. + if (p > node.min && p < node.max) + { + si = DistanceToSurface(nodes, triangles, vertices, normals, in nodes[node.firstChild + 1], in point); + + // only recurse down left child if nearest surface in right child is furthest than left pivot. + if (Mathf.Abs(si) > Mathf.Abs(p - node.min)) + si = MinSignedDistance(si, DistanceToSurface(nodes, triangles, vertices, normals, in nodes[node.firstChild], in point)); + } + // CASE 5: in the left child. Just like case 3. + else if (p <= node.min) + { + si = DistanceToSurface(nodes, triangles, vertices, normals, in nodes[node.firstChild], in point); + + // only recurse down left child if nearest surface in right child is furthest than left pivot. + if (Mathf.Abs(si) > Mathf.Abs(node.max - p)) + si = MinSignedDistance(si, DistanceToSurface(nodes, triangles, vertices, normals, in nodes[node.firstChild + 1], in point)); + } + // CASE 6: in the right child. Just like case 2 + else if (p >= node.max) + { + si = DistanceToSurface(nodes, triangles, vertices, normals, in nodes[node.firstChild + 1], in point); + + // only recurse down left child if nearest surface in right child is furthest than left pivot. + if (Mathf.Abs(si) > Mathf.Abs(p - node.min)) + si = MinSignedDistance(si, DistanceToSurface(nodes, triangles, vertices, normals, in nodes[node.firstChild], in point)); + } + } + + return si; + } + else + return DistanceToSurface(triangles, vertices, normals, in node, point); + } + + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/BVH/BIH.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/BVH/BIH.cs.meta new file mode 100644 index 00000000..767c410f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/BVH/BIH.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7d1727eb52e8f4619a5dc1084db72db0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/BVH/BIHNode.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/BVH/BIHNode.cs new file mode 100644 index 00000000..0599e5e3 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/BVH/BIHNode.cs @@ -0,0 +1,25 @@ +using System; + +namespace Obi +{ + public struct BIHNode + { + public int firstChild; /**< index of the first child node. The second one is right after the first.*/ + public int start; /**< index of the first element in this node.*/ + public int count; /**< amount of elements in this node.*/ + + public int axis; /**< axis of the split plane (0,1,2 = x,y,z)*/ + public float min; /**< minimum split plane*/ + public float max; /**< maximum split plane*/ + + public BIHNode(int start, int count) + { + firstChild = -1; + this.start = start; + this.count = count; + axis = 0; + min = float.MinValue; + max = float.MaxValue; + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/BVH/BIHNode.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/BVH/BIHNode.cs.meta new file mode 100644 index 00000000..618215bc --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/BVH/BIHNode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 128610647c5e64bc284f13abefda3a58 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/BVH/IBounded.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/BVH/IBounded.cs new file mode 100644 index 00000000..f6cf2b3c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/BVH/IBounded.cs @@ -0,0 +1,10 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public interface IBounded + { + Aabb GetBounds(); + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/BVH/IBounded.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/BVH/IBounded.cs.meta new file mode 100644 index 00000000..37605497 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/BVH/IBounded.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 44a65f44be3e24beca5faaa7d2c28480 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/CellSpan.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/CellSpan.cs new file mode 100644 index 00000000..12e7453b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/CellSpan.cs @@ -0,0 +1,17 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public struct CellSpan + { + public VInt4 min; + public VInt4 max; + + public CellSpan(VInt4 min, VInt4 max) + { + this.min = min; + this.max = max; + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/CellSpan.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/CellSpan.cs.meta new file mode 100644 index 00000000..4b19c3ac --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/CellSpan.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 786fc387d096a4921bd52253d3f51b02 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ColliderRigidbody.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ColliderRigidbody.cs new file mode 100644 index 00000000..e51423f4 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ColliderRigidbody.cs @@ -0,0 +1,68 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public struct ColliderRigidbody + { + public Matrix4x4 inverseInertiaTensor; + public Vector4 velocity; + public Vector4 angularVelocity; + public Vector4 com; + public float inverseMass; + + public int constraintCount; + private int pad1; + private int pad2; + + public void FromRigidbody(ObiRigidbody rb) + { + bool kinematic = !Application.isPlaying || rb.unityRigidbody.isKinematic || rb.kinematicForParticles; + + //rotation = source.rotation; + 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: + com = rb.unityRigidbody.position + rb.unityRigidbody.rotation * rb.unityRigidbody.centerOfMass; + + Vector3 invTensor = new Vector3((rb.unityRigidbody.constraints & RigidbodyConstraints.FreezeRotationX) != 0 ? 0 : 1 / rb.unityRigidbody.inertiaTensor.x, + (rb.unityRigidbody.constraints & RigidbodyConstraints.FreezeRotationY) != 0 ? 0 : 1 / rb.unityRigidbody.inertiaTensor.y, + (rb.unityRigidbody.constraints & RigidbodyConstraints.FreezeRotationZ) != 0 ? 0 : 1 / rb.unityRigidbody.inertiaTensor.z); + + // the inertia tensor is a diagonal matrix (Vector3) because it is expressed in the space generated by the principal axes of rotation (inertiaTensorRotation). + Vector3 inertiaTensor = kinematic ? Vector3.zero : invTensor; + + // calculate full world space inertia matrix: + Matrix4x4 rotation = Matrix4x4.Rotate(rb.unityRigidbody.rotation * rb.unityRigidbody.inertiaTensorRotation); + inverseInertiaTensor = rotation * Matrix4x4.Scale(inertiaTensor) * rotation.transpose; + + inverseMass = kinematic ? 0 : 1 / rb.unityRigidbody.mass; + + } + + public void FromRigidbody(ObiRigidbody2D rb) + { + + bool kinematic = !Application.isPlaying || rb.unityRigidbody.isKinematic || rb.kinematicForParticles; + velocity = rb.linearVelocity; + + // For some weird reason, in 2D angular velocity is measured in *degrees* per second, + // instead of radians. Seriously Unity, WTF?? + angularVelocity = new Vector4(0, 0, rb.angularVelocity * Mathf.Deg2Rad, 0); + + // center of mass in unity is affected by local rotation and poistion, but not scale. We need it expressed in world space: + com = rb.transform.position + rb.transform.rotation * rb.unityRigidbody.centerOfMass; + + Vector3 inertiaTensor = kinematic ? Vector3.zero : new Vector3(0, 0, (rb.unityRigidbody.constraints & RigidbodyConstraints2D.FreezeRotation) != 0 ? 0 : 1 / rb.unityRigidbody.inertia); + + Matrix4x4 rotation = Matrix4x4.Rotate(Quaternion.AngleAxis(rb.rotation, Vector3.forward)); + inverseInertiaTensor = rotation * Matrix4x4.Scale(inertiaTensor) * rotation.transpose; + + inverseMass = kinematic ? 0 : 1 / rb.unityRigidbody.mass; + + } + + + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ColliderRigidbody.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ColliderRigidbody.cs.meta new file mode 100644 index 00000000..ee331897 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ColliderRigidbody.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2273ddd528c3a44af9ef3f985a620e24 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ColliderShape.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ColliderShape.cs new file mode 100644 index 00000000..f71030e2 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ColliderShape.cs @@ -0,0 +1,55 @@ +using UnityEngine; + +namespace Obi +{ + public struct ColliderShape + { + public enum ShapeType + { + Sphere = 0, + Box = 1, + Capsule = 2, + Heightmap = 3, + TriangleMesh = 4, + EdgeMesh = 5, + SignedDistanceField = 6 + } + + public Vector4 center; + public Vector4 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.*/ + 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; // 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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ColliderShape.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ColliderShape.cs.meta new file mode 100644 index 00000000..9f1dc6e0 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ColliderShape.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38d82eae8f8744bdc9f0795c1fd3b317 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/CollisionMaterial.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/CollisionMaterial.cs new file mode 100644 index 00000000..f0c815d5 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/CollisionMaterial.cs @@ -0,0 +1,35 @@ +using UnityEngine; +using System.Collections; +using System.Runtime.InteropServices; + +namespace Obi +{ + [StructLayout(LayoutKind.Sequential)] + public struct CollisionMaterial + { + public float dynamicFriction; + public float staticFriction; + public float rollingFriction; + public float stickiness; + public float stickDistance; + public Oni.MaterialCombineMode frictionCombine; + public Oni.MaterialCombineMode stickinessCombine; + public int rollingContacts; + + public void FromObiCollisionMaterial(ObiCollisionMaterial material) + { + if (material != null) + { + dynamicFriction = material.dynamicFriction; + staticFriction = material.staticFriction; + stickiness = material.stickiness; + stickDistance = material.stickDistance; + rollingFriction = material.rollingFriction; + frictionCombine = material.frictionCombine; + stickinessCombine = material.stickinessCombine; + rollingContacts = material.rollingContacts ? 1 : 0; + } + } + + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/CollisionMaterial.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/CollisionMaterial.cs.meta new file mode 100644 index 00000000..9653b5b0 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/CollisionMaterial.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed8262093b9b44e8abb2557ed2624c4d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ContactEffectiveMasses.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ContactEffectiveMasses.cs new file mode 100644 index 00000000..1f3a8d20 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ContactEffectiveMasses.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ContactEffectiveMasses.cs.meta new file mode 100644 index 00000000..bf8ca76f --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/EmitPoint.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/EmitPoint.cs new file mode 100644 index 00000000..dfa50f31 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/EmitPoint.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/EmitPoint.cs.meta new file mode 100644 index 00000000..cc9dd048 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/EmittedParticleData.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/EmittedParticleData.cs new file mode 100644 index 00000000..17ec8aee --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/EmittedParticleData.cs @@ -0,0 +1,15 @@ +using UnityEngine; + +namespace Obi +{ + public struct EmittedParticleData + { + public Vector4 fluidMaterial; + 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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/EmittedParticleData.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/EmittedParticleData.cs.meta new file mode 100644 index 00000000..d57c7784 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ForceZone.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ForceZone.cs new file mode 100644 index 00000000..bc7d687a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ForceZone.cs @@ -0,0 +1,40 @@ +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 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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ForceZone.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ForceZone.cs.meta new file mode 100644 index 00000000..f39f401c --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/InertialFrame.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/InertialFrame.cs new file mode 100644 index 00000000..4f2561f9 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/InertialFrame.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/InertialFrame.cs.meta new file mode 100644 index 00000000..56b8e923 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList.meta new file mode 100644 index 00000000..c9416a7c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2f5d490805c6e4ee6b39c067e26e490c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAabbList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAabbList.cs new file mode 100644 index 00000000..0c699a24 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAabbList.cs @@ -0,0 +1,18 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeAabbList : ObiNativeList + { + public ObiNativeAabbList() { } + public ObiNativeAabbList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = new Aabb(); + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAabbList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAabbList.cs.meta new file mode 100644 index 00000000..398a6041 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAabbList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 96e807cda064c47c1aed643600660143 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAffineTransformList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAffineTransformList.cs new file mode 100644 index 00000000..466b4f8d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAffineTransformList.cs @@ -0,0 +1,18 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeAffineTransformList : ObiNativeList + { + public ObiNativeAffineTransformList() { } + public ObiNativeAffineTransformList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = new AffineTransform(); + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAffineTransformList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAffineTransformList.cs.meta new file mode 100644 index 00000000..c5ae9d09 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAffineTransformList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f741a9b23bfd4f55979eb1a18146388 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBIHNodeList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBIHNodeList.cs new file mode 100644 index 00000000..376276d2 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBIHNodeList.cs @@ -0,0 +1,17 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeBIHNodeList : ObiNativeList + { + public ObiNativeBIHNodeList() { } + public ObiNativeBIHNodeList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = new BIHNode(); + } + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBIHNodeList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBIHNodeList.cs.meta new file mode 100644 index 00000000..301def19 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBIHNodeList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c960e0992a4cf4d7195a513c5fd5f550 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBoneWeightList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBoneWeightList.cs new file mode 100644 index 00000000..83c37551 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBoneWeightList.cs @@ -0,0 +1,18 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeBoneWeightList : ObiNativeList + { + public ObiNativeBoneWeightList() { } + public ObiNativeBoneWeightList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = new BoneWeight1(); + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBoneWeightList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBoneWeightList.cs.meta new file mode 100644 index 00000000..36daa8ed --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBoneWeightList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 50b49a1cc8de340ebb8d6a89fb044c1d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeByteList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeByteList.cs new file mode 100644 index 00000000..800c3046 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeByteList.cs @@ -0,0 +1,18 @@ +using System; + +namespace Obi +{ + [Serializable] + public class ObiNativeByteList : ObiNativeList + { + + public ObiNativeByteList() { } + public ObiNativeByteList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = 0; + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeByteList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeByteList.cs.meta new file mode 100644 index 00000000..ffe7d6fd --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeByteList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aefb86b129c07425fa244ada261f4184 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCellSpanList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCellSpanList.cs new file mode 100644 index 00000000..468759ce --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCellSpanList.cs @@ -0,0 +1,18 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeCellSpanList : ObiNativeList + { + public ObiNativeCellSpanList() { } + public ObiNativeCellSpanList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = new CellSpan(); + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCellSpanList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCellSpanList.cs.meta new file mode 100644 index 00000000..f06f2c71 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCellSpanList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 53a29ecfe0ecb4db3a344781b333776d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColliderShapeList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColliderShapeList.cs new file mode 100644 index 00000000..bce8165f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColliderShapeList.cs @@ -0,0 +1,18 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeColliderShapeList : ObiNativeList + { + public ObiNativeColliderShapeList() { } + public ObiNativeColliderShapeList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = new ColliderShape(); + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColliderShapeList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColliderShapeList.cs.meta new file mode 100644 index 00000000..22379f03 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColliderShapeList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 45031e9a1b74143c4a6df44e2b999373 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCollisionMaterialList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCollisionMaterialList.cs new file mode 100644 index 00000000..0f1a048a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCollisionMaterialList.cs @@ -0,0 +1,18 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeCollisionMaterialList : ObiNativeList + { + public ObiNativeCollisionMaterialList() { } + public ObiNativeCollisionMaterialList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = new CollisionMaterial(); + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCollisionMaterialList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCollisionMaterialList.cs.meta new file mode 100644 index 00000000..1c43e6ae --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCollisionMaterialList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f6d32cd2f844a48cab0508f798fc1ff4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColorList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColorList.cs new file mode 100644 index 00000000..94e9cef2 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColorList.cs @@ -0,0 +1,17 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeColorList : ObiNativeList + { + public ObiNativeColorList() { } + public ObiNativeColorList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = Color.white; + } + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColorList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColorList.cs.meta new file mode 100644 index 00000000..eb41d0f7 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColorList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f377d76dadb3945b39cfac818a54d1be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeContactList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeContactList.cs new file mode 100644 index 00000000..339b196d --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeContactList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeContactList.cs.meta new file mode 100644 index 00000000..74a33c11 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDFNodeList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDFNodeList.cs new file mode 100644 index 00000000..c19ee95f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDFNodeList.cs @@ -0,0 +1,18 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeDFNodeList : ObiNativeList + { + public ObiNativeDFNodeList() { } + public ObiNativeDFNodeList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = new DFNode(); + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDFNodeList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDFNodeList.cs.meta new file mode 100644 index 00000000..44752470 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDFNodeList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 17462646d532945749479c75ba3cd0d8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDistanceFieldHeaderList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDistanceFieldHeaderList.cs new file mode 100644 index 00000000..a784f777 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDistanceFieldHeaderList.cs @@ -0,0 +1,17 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeDistanceFieldHeaderList : ObiNativeList + { + public ObiNativeDistanceFieldHeaderList() { } + public ObiNativeDistanceFieldHeaderList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = new DistanceFieldHeader(); + } + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDistanceFieldHeaderList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDistanceFieldHeaderList.cs.meta new file mode 100644 index 00000000..198e874f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDistanceFieldHeaderList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1e18334e185814395aac025a1d4afe70 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeList.cs new file mode 100644 index 00000000..6589654c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeList.cs @@ -0,0 +1,17 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeEdgeList : ObiNativeList + { + public ObiNativeEdgeList() { } + public ObiNativeEdgeList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = new Edge(); + } + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeList.cs.meta new file mode 100644 index 00000000..1d014136 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d602b9fba6fc4e78a78b8dee0acd309 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeMeshHeaderList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeMeshHeaderList.cs new file mode 100644 index 00000000..6055829d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeMeshHeaderList.cs @@ -0,0 +1,17 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeEdgeMeshHeaderList : ObiNativeList + { + public ObiNativeEdgeMeshHeaderList() { } + public ObiNativeEdgeMeshHeaderList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = new EdgeMeshHeader(); + } + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeMeshHeaderList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeMeshHeaderList.cs.meta new file mode 100644 index 00000000..98f0f3d8 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeMeshHeaderList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 474a95d0d9d37494f9ac5201e262b8a4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEffectiveMassesList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEffectiveMassesList.cs new file mode 100644 index 00000000..974f9f32 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEffectiveMassesList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEffectiveMassesList.cs.meta new file mode 100644 index 00000000..813424cb --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEmitPointList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEmitPointList.cs new file mode 100644 index 00000000..39abfa12 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEmitPointList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEmitPointList.cs.meta new file mode 100644 index 00000000..13c552e6 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeFloatList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeFloatList.cs new file mode 100644 index 00000000..b1c418bf --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeFloatList.cs @@ -0,0 +1,18 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeFloatList : ObiNativeList + { + public ObiNativeFloatList() { } + public ObiNativeFloatList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = 0; + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeFloatList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeFloatList.cs.meta new file mode 100644 index 00000000..332159d3 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeFloatList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7cf0e80d841ca4425a99bc2d4beb3547 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeForceZoneList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeForceZoneList.cs new file mode 100644 index 00000000..442146f1 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeForceZoneList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeForceZoneList.cs.meta new file mode 100644 index 00000000..65b36912 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeHeightFieldHeaderList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeHeightFieldHeaderList.cs new file mode 100644 index 00000000..1baeff23 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeHeightFieldHeaderList.cs @@ -0,0 +1,18 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeHeightFieldHeaderList : ObiNativeList + { + public ObiNativeHeightFieldHeaderList() { } + public ObiNativeHeightFieldHeaderList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = new HeightFieldHeader(); + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeHeightFieldHeaderList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeHeightFieldHeaderList.cs.meta new file mode 100644 index 00000000..412b35ad --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeHeightFieldHeaderList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 61e8d2ecda37e442aa8f24756395f12a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeInt4List.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeInt4List.cs new file mode 100644 index 00000000..81d9d069 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeInt4List.cs @@ -0,0 +1,22 @@ +using System; + +namespace Obi +{ + [Serializable] + public class ObiNativeInt4List : ObiNativeList + { + public ObiNativeInt4List() { } + public ObiNativeInt4List(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = new VInt4(0,0,0,0); + } + + public ObiNativeInt4List(int capacity, int alignment, VInt4 defaultValue) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = defaultValue; + } + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeInt4List.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeInt4List.cs.meta new file mode 100644 index 00000000..1a032a3f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeInt4List.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 18f572cdc044a4caabe29c40944c0987 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntList.cs new file mode 100644 index 00000000..63bf4570 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntList.cs @@ -0,0 +1,17 @@ +using System; + +namespace Obi +{ + [Serializable] + public class ObiNativeIntList : ObiNativeList + { + public ObiNativeIntList() { } + public ObiNativeIntList(int capacity = 8, int alignment = 16) : base(capacity,alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = 0; + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntList.cs.meta new file mode 100644 index 00000000..be226462 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f8a8fd8447dc458bab16dea3dfd5580 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntPtrList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntPtrList.cs new file mode 100644 index 00000000..6ac489c1 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntPtrList.cs @@ -0,0 +1,16 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public class ObiNativeIntPtrList : ObiNativeList + { + public ObiNativeIntPtrList() { } + public ObiNativeIntPtrList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = IntPtr.Zero; + } + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntPtrList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntPtrList.cs.meta new file mode 100644 index 00000000..4d49d8b6 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntPtrList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6201c3f1582cd43deaaf41286f802126 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeList.cs new file mode 100644 index 00000000..d36dbec2 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeList.cs @@ -0,0 +1,700 @@ +using System; +using System.Text; +using System.Collections.Generic; +using UnityEngine; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using System.Collections; +using UnityEngine.Rendering; +using System.Linq; + +namespace Obi +{ + public unsafe class ObiNativeList : IEnumerable, IDisposable, ISerializationCallbackReceiver where T : struct + { + public T[] serializedContents; + protected void* m_AlignedPtr = null; + + protected int m_Stride; + protected int m_Capacity; + protected int m_Count; + [SerializeField] protected int m_AlignBytes = 16; + +#if ENABLE_UNITY_COLLECTIONS_CHECKS + protected AtomicSafetyHandle m_SafetyHandle; +#endif + + 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 + { + set + { + if (value != m_Count) + { + // we should not use ResizeUninitialized as it would destroy all current data. + // 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); + } + } + get { return m_Count; } + } + + public int capacity + { + 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); + 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 + } + + public ObiNativeList(int capacity = 8, int alignment = 16) + { + m_Stride = UnsafeUtility.SizeOf(); + +#if ENABLE_UNITY_COLLECTIONS_CHECKS + m_SafetyHandle = AtomicSafetyHandle.Create(); +#endif + m_AlignBytes = alignment; + ChangeCapacity(capacity); + } + + ~ObiNativeList() + { + Dispose(false); + } + + protected void Dispose(bool disposing) + { + DisposeOfComputeBuffer(); + + if (isCreated) + { + // 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: + AtomicSafetyHandle.CheckDeallocateAndThrow(m_SafetyHandle); + AtomicSafetyHandle.Release(m_SafetyHandle); +#endif + } + } + + public void Dispose() + { + 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) + { + // create a new managed array to serialize the data: + serializedContents = new T[m_Count]; + + // pin the managed array and get its address: + ulong serializedContentsHandle; + var serializedContentsAddress = UnsafeUtility.PinGCArrayAndGetDataAddress(serializedContents, out serializedContentsHandle); + + // copy data over to the managed array: + UnsafeUtility.MemCpy(serializedContentsAddress, m_AlignedPtr, m_Count * m_Stride); + + // unpin the managed array: + UnsafeUtility.ReleaseGCObject(serializedContentsHandle); + } + } + + public void OnAfterDeserialize() + { + if (serializedContents != null) + { + // resize to receive the serialized data: + ResizeUninitialized(serializedContents.Length); + + // pin the managed array and get its address: + ulong serializedContentsHandle; + var serializedContentsAddress = UnsafeUtility.PinGCArrayAndGetDataAddress(serializedContents, out serializedContentsHandle); + + // copy data from the managed array: + UnsafeUtility.MemCpy(m_AlignedPtr, serializedContentsAddress, m_Count * m_Stride); + + // unpin the managed array: + UnsafeUtility.ReleaseGCObject(serializedContentsHandle); + } + } + + // Reinterprets the data in the list as a native array. + public NativeArray AsNativeArray() where U : struct + { + return AsNativeArray(m_Count); + } + + 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, 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, 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 + { + return AsComputeBuffer(Mathf.Max(1,m_Count), bufferType); + } + + // 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) + { + // 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. + 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) + { + 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, m_AlignBytes, Allocator.Persistent); + + // if there was a previous allocation: + if (isCreated) + { + // copy contents from previous memory region + unsafe + { + UnsafeUtility.MemCpy(newAlignedPtr, m_AlignedPtr, Mathf.Min(newCapacity, m_Capacity) * m_Stride); + } + + // free previous memory region + UnsafeUtility.Free(m_AlignedPtr, Allocator.Persistent); + } + + // get hold of new pointers/capacity. + m_AlignedPtr = newAlignedPtr; + m_Capacity = newCapacity; + } + + public bool Compare(ObiNativeList other) + { + if (other == null || !isCreated || !other.isCreated) + throw new ArgumentNullException(); + + if (m_Count != other.m_Count) + return false; + + return UnsafeUtility.MemCmp(m_AlignedPtr, other.m_AlignedPtr, m_Count * m_Stride) == 0; + } + + public void CopyFrom(ObiNativeList source) + { + if (source == null || !isCreated || !source.isCreated) + throw new ArgumentNullException(); + + if (m_Count < source.m_Count) + throw new ArgumentOutOfRangeException(); + + UnsafeUtility.MemCpy(m_AlignedPtr, source.m_AlignedPtr, source.count * m_Stride); + } + + public void CopyFrom(ObiNativeList source, int sourceIndex, int destIndex, int length) + { + if (source == null || !isCreated || !source.isCreated) + throw new ArgumentNullException(); + + if (length <= 0 || source.m_Count == 0) + return; + + if (sourceIndex >= source.m_Count || sourceIndex < 0 || destIndex >= m_Count || destIndex < 0 || + sourceIndex + length > source.m_Count || destIndex + length > m_Count) + throw new ArgumentOutOfRangeException(); + + 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) + { + if (length <= 0) return; + + if (!isCreated) + throw new ArgumentNullException(); + + if (destIndex >= m_Count || destIndex < 0 || destIndex + length > m_Count) + throw new ArgumentOutOfRangeException(); + + void* sourceAddress = UnsafeUtility.AddressOf(ref value); + void* destAddress = AddressOfElement(destIndex); + UnsafeUtility.MemCpyReplicate(destAddress, sourceAddress, m_Stride, length); + } + + public void CopyTo(T[] dest, int sourceIndex, int length) + { + if (length <= 0) return; + + if (dest == null || !isCreated) + throw new ArgumentNullException(); + + if (sourceIndex < 0 || sourceIndex >= m_Count || sourceIndex + length > m_Count || length > dest.Length) + throw new ArgumentOutOfRangeException(); + + ulong destHandle; + void* sourceAddress = AddressOfElement(sourceIndex); + void* destAddress = UnsafeUtility.PinGCArrayAndGetDataAddress(dest, out destHandle); + UnsafeUtility.MemCpy(destAddress, sourceAddress, length * m_Stride); + + UnsafeUtility.ReleaseGCObject(destHandle); + } + + public void Clear() + { + m_Count = 0; + } + + 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; + if (collection != null && collection.Count > 0) + { + EnsureCapacity(m_Count + collection.Count); + } + + using (IEnumerator enumerator = enumerable.GetEnumerator()) + { + while (enumerator.MoveNext()) + { + Add(enumerator.Current); + } + } + } + + public void RemoveRange(int index, int count) + { + if (index < 0 || count < 0 || index + count > m_Count) + throw new ArgumentOutOfRangeException(); + + for (int i = index; i < m_Count - count; ++i) + this[i] = this[i + count]; + + m_Count -= count; + } + + public void RemoveAt(int index) + { + if (index < 0 || index >= count) + throw new ArgumentOutOfRangeException(); + + for (int i = index; i < m_Count - 1; ++i) + this[i] = this[i + 1]; + + m_Count--; + } + + /** + * Ensures a minimal capacity of count elements, then sets the new count. Useful when passing the backing array to C++ + * for being filled with new data. + */ + public bool ResizeUninitialized(int newCount) + { + newCount = Mathf.Max(0, newCount); + bool realloc = EnsureCapacity(newCount); + + m_Count = newCount; + + return realloc; + } + + public bool ResizeInitialized(int newCount, T value = default(T)) + { + newCount = Mathf.Max(0, newCount); + + bool initialize = newCount >= m_Capacity || !isCreated; + bool realloc = EnsureCapacity(newCount); + + if (initialize) + { + void* sourceAddress = UnsafeUtility.AddressOf(ref value); + void* destAddress = AddressOfElement(m_Count); + UnsafeUtility.MemCpyReplicate(destAddress, sourceAddress, m_Stride, m_Capacity - m_Count); + } + + m_Count = newCount; + + return realloc; + } + + public bool EnsureCapacity(int min) + { + if (min >= m_Capacity || !isCreated) + { + ChangeCapacity(min * 2); + return true; + } + return false; + } + + public void WipeToZero() + { + 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; + } + } + } + + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append('['); + + for (int t = 0; t < m_Count; t++) + { + sb.Append(this[t].ToString()); + + if (t < (m_Count - 1)) sb.Append(','); + + } + sb.Append(']'); + return sb.ToString(); + } + + public void* AddressOfElement(int index) + { + return (void*) ((byte*)m_AlignedPtr + m_Stride * index); + } + + public IntPtr GetIntPtr() + { + if (isCreated) + return new IntPtr(m_AlignedPtr); + return IntPtr.Zero; + } + + public void Swap(int index1, int index2) + { + // check to avoid out of bounds access: + if (index1 >= 0 && index1 < count && index2 >= 0 && index2 < count) + { + var aux = this[index1]; + this[index1] = this[index2]; + this[index2] = aux; + } + } + + public IEnumerator GetEnumerator() + { + for (int i = 0; i < count; ++i) + { + yield return this[i]; + } + } + + IEnumerator IEnumerable.GetEnumerator() + { + return this.GetEnumerator(); + } + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeList.cs.meta new file mode 100644 index 00000000..6bfb7bb8 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be1183504e86c409d97f706fcfcb0b3f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeMatrix4x4List.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeMatrix4x4List.cs new file mode 100644 index 00000000..64cffb4d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeMatrix4x4List.cs @@ -0,0 +1,23 @@ +using System; +using UnityEngine; + +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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeMatrix4x4List.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeMatrix4x4List.cs.meta new file mode 100644 index 00000000..c9005425 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeMatrix4x4List.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 57e079b439b8f4d71966919ca4fa4838 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQuaternionList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQuaternionList.cs new file mode 100644 index 00000000..c8552ff3 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQuaternionList.cs @@ -0,0 +1,24 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeQuaternionList : ObiNativeList + { + public ObiNativeQuaternionList() { } + public ObiNativeQuaternionList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = Quaternion.identity; + } + + public ObiNativeQuaternionList(int capacity, int alignment, Quaternion defaultValue) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = defaultValue; + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQuaternionList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQuaternionList.cs.meta new file mode 100644 index 00000000..c60a0807 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQuaternionList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6bad311b87fb6408793370e029c1d625 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryResultList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryResultList.cs new file mode 100644 index 00000000..d82e9de0 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryResultList.cs @@ -0,0 +1,17 @@ +using System; + +namespace Obi +{ + [Serializable] + public class ObiNativeQueryResultList : ObiNativeList + { + + public ObiNativeQueryResultList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = new QueryResult(); + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryResultList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryResultList.cs.meta new file mode 100644 index 00000000..694b63a3 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryResultList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 415658bfe3b0f45c285a26d383086a70 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryShapeList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryShapeList.cs new file mode 100644 index 00000000..c7aa54f7 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryShapeList.cs @@ -0,0 +1,17 @@ +using System; + +namespace Obi +{ + [Serializable] + public class ObiNativeQueryShapeList : ObiNativeList + { + + public ObiNativeQueryShapeList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = new QueryShape(); + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryShapeList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryShapeList.cs.meta new file mode 100644 index 00000000..c148868c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryShapeList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a1b44ba5a49564f81bc8eeebbee71cf3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeRigidbodyList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeRigidbodyList.cs new file mode 100644 index 00000000..221ff10f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeRigidbodyList.cs @@ -0,0 +1,18 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeRigidbodyList : ObiNativeList + { + public ObiNativeRigidbodyList() { } + public ObiNativeRigidbodyList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = new ColliderRigidbody(); + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeRigidbodyList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeRigidbodyList.cs.meta new file mode 100644 index 00000000..d5811a35 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeRigidbodyList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 28ae021335a854c3eb91c500cd4c77b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleList.cs new file mode 100644 index 00000000..6fd173aa --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleList.cs @@ -0,0 +1,18 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeTriangleList : ObiNativeList + { + public ObiNativeTriangleList() { } + public ObiNativeTriangleList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = new Triangle(); + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleList.cs.meta new file mode 100644 index 00000000..6c43dfc5 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0eda4a24fce5949d284395fe3a782477 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleMeshHeaderList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleMeshHeaderList.cs new file mode 100644 index 00000000..ed34c97b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleMeshHeaderList.cs @@ -0,0 +1,18 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeTriangleMeshHeaderList : ObiNativeList + { + public ObiNativeTriangleMeshHeaderList() { } + public ObiNativeTriangleMeshHeaderList(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = new TriangleMeshHeader(); + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleMeshHeaderList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleMeshHeaderList.cs.meta new file mode 100644 index 00000000..f0ba2517 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleMeshHeaderList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b7289725194bb4368a4ac8e6cd9a7062 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeUIntList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeUIntList.cs new file mode 100644 index 00000000..542f40f3 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeUIntList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeUIntList.cs.meta new file mode 100644 index 00000000..b6f26ce3 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector2List.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector2List.cs new file mode 100644 index 00000000..94f9c6b5 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector2List.cs @@ -0,0 +1,18 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeVector2List : ObiNativeList + { + public ObiNativeVector2List() { } + public ObiNativeVector2List(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = Vector2.zero; + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector2List.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector2List.cs.meta new file mode 100644 index 00000000..f62d13ea --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector2List.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 097972b931df946398eb40913011ada0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector3List.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector3List.cs new file mode 100644 index 00000000..4fb3b000 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector3List.cs @@ -0,0 +1,18 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeVector3List : ObiNativeList + { + public ObiNativeVector3List() { } + public ObiNativeVector3List(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = Vector3.zero; + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector3List.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector3List.cs.meta new file mode 100644 index 00000000..c14bf94e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector3List.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb8db19bcf3ce468786ed448ea6821d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector4List.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector4List.cs new file mode 100644 index 00000000..2f72c638 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector4List.cs @@ -0,0 +1,36 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [Serializable] + public class ObiNativeVector4List : ObiNativeList + { + public ObiNativeVector4List() { } + public ObiNativeVector4List(int capacity = 8, int alignment = 16) : base(capacity, alignment) + { + for (int i = 0; i < capacity; ++i) + this[i] = Vector4.zero; + } + + + public Vector3 GetVector3(int index) + { + unsafe + { + byte* start = (byte*)m_AlignedPtr + index * sizeof(Vector4); + return *(Vector3*)start; + } + } + + public void SetVector3(int index, Vector3 value) + { + unsafe + { + byte* start = (byte*)m_AlignedPtr + index * sizeof(Vector4); + *(Vector3*)start = value; + } + } + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector4List.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector4List.cs.meta new file mode 100644 index 00000000..681b0b72 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector4List.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7a1016daf70074bd790b5a278c314263 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ObiList.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ObiList.cs new file mode 100644 index 00000000..6c7b86aa --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ObiList.cs @@ -0,0 +1,165 @@ +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + /** + * Custom IList implementation that allows access to the underlying raw array, for efficient C++ interop. Also + * includes some auxiliar methods that make it easier and faster to send data back and forth between C# and C++, as + * well as deal with accesing the contents of the list directly without a copy. + */ + public class ObiList : IList + { + private T[] data = new T[16]; + private int count = 0; + + #region Implementation of IEnumerable + + public IEnumerator GetEnumerator() + { + for (int i = 0; i < count;++i) + yield return data[i]; + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + #endregion + + #region Implementation of ICollection + + public void Add(T item) + { + EnsureCapacity(count + 1); + data[count++] = item; + } + + public void Clear() + { + count = 0; + } + + public bool Contains(T item) + { + for (int i = 0; i < count; ++i) + if (data[i].Equals(item)) + return true; + return false; + } + + public void CopyTo(T[] array, int arrayIndex) + { + if (array == null) + throw new ArgumentNullException(); + + if (array.Length-arrayIndex < count) + throw new ArgumentException(); + + Array.Copy(data,0,array,arrayIndex,count); + } + + public bool Remove(T item) + { + bool found = false; + for (int i = 0; i < count; ++i) + { + // Look for the element, and mark it as found. + if (!found && data[i].Equals(item)) + found = true; + + //If we found the element and are not at the last element, displace the element 1 position backwards. + if (found && i < count-1) + { + data[i] = data[i+1]; + } + } + + // If we found and removed the element, reduce the element count by 1. + if (found) + count--; + + return found; + } + + public int Count + { + get { return count; } + } + + public bool IsReadOnly + { + get { return false; } + } + + #endregion + + #region Implementation of IList + + public int IndexOf(T item) + { + return Array.IndexOf(data,item); + } + + public void Insert(int index, T item) + { + if (index < 0 || index > count) + throw new ArgumentOutOfRangeException(); + + EnsureCapacity(++count); + + for (int i = count-1; i > index; --i) + { + data[i] = data[i-1]; + } + + data[index] = item; + } + + public void RemoveAt(int index) + { + for (int i = index; i < count; ++i) + { + if (i < count-1) + { + data[i] = data[i+1]; + } + } + + count--; + } + + public T this[int index] + { + get { return data[index]; } + set { data[index] = value; } + } + + #endregion + + #region Added stuff + + public T[] Data{ + get{return data;} + } + + /** + * Ensures a minimal capacity of count elements, then sets the new count. Useful when passing the backing array to C++ + * for being filled with new data. + */ + public void SetCount(int count){ + EnsureCapacity(count); + this.count = count; + } + + public void EnsureCapacity(int capacity){ + if (capacity >= data.Length) + Array.Resize(ref data,capacity*2); + } + + #endregion + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ObiList.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ObiList.cs.meta new file mode 100644 index 00000000..c47f6adc --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ObiList.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d8100b324be8f46cc9578fd52193a876 +timeCreated: 1513467715 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ParticlePair.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ParticlePair.cs new file mode 100644 index 00000000..18ab9f1f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ParticlePair.cs @@ -0,0 +1,24 @@ +using UnityEngine; +using System.Collections; + + +namespace Obi +{ + public struct ParticlePair + { + public int first; + public int second; + + public ParticlePair(int first, int second) + { + this.first = first; + this.second = second; + } + + public int this[int index] + { + get { return index == 0 ? first : second; } + set { if (index == 0) first = value; else second = value; } + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ParticlePair.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ParticlePair.cs.meta new file mode 100644 index 00000000..03bca088 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/ParticlePair.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 248fe94c499654ccf8bee67c72942dde +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Queries.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Queries.meta new file mode 100644 index 00000000..a8d87e4f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Queries.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 10c69aca53bad420799af0abb9f185ea +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryResult.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryResult.cs new file mode 100644 index 00000000..72245ed7 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryResult.cs @@ -0,0 +1,17 @@ +using UnityEngine; +using System.Runtime.InteropServices; + +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 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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryResult.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryResult.cs.meta new file mode 100644 index 00000000..7420cabf --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a2effdf7f81654462ac5af1735de92eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryShape.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryShape.cs new file mode 100644 index 00000000..a035e46c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryShape.cs @@ -0,0 +1,36 @@ +using UnityEngine; + +namespace Obi +{ + public struct QueryShape + { + public enum QueryType + { + Sphere = 0, + Box = 1, + Ray = 2, + } + + public Vector4 center; /**< box: center of the box in solver space. + sphere: center of the sphere in solver space,. + ray: start of the ray in solver space.*/ + + public Vector4 size; /**< box: size of the box in each axis. + sphere: radius of sphere (x,y,z), + ray: end of the line segment in solver space.*/ + public QueryType type; + public float contactOffset; + public float maxDistance; // minimum distance around the shape to look for. + public int filter; + + public QueryShape(QueryType type, Vector3 center, Vector3 size, float contactOffset, float distance, int filter) + { + this.type = type; + this.center = center; + this.size = size; + this.contactOffset = contactOffset; + this.maxDistance = distance; + this.filter = filter; + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryShape.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryShape.cs.meta new file mode 100644 index 00000000..7276f449 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryShape.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d126422956eb46eaa20e28b8d59122c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/RegularGrid.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/RegularGrid.meta new file mode 100644 index 00000000..c9ad98ff --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/RegularGrid.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2c4a05fed09dd4e9e9d346fa3f1ccd55 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/RegularGrid/RegularGrid.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/RegularGrid/RegularGrid.cs new file mode 100644 index 00000000..5b92932f --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/RegularGrid/RegularGrid.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/RegularGrid/RegularGrid.cs.meta new file mode 100644 index 00000000..96fcea3b --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/SimplexCounts.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/SimplexCounts.cs new file mode 100644 index 00000000..f2adcf1e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/SimplexCounts.cs @@ -0,0 +1,46 @@ +using UnityEngine; +using System.Collections; + + +namespace Obi +{ + public struct SimplexCounts + { + public int pointCount; + public int edgeCount; + public int triangleCount; + + public int simplexCount + { + get { return pointCount + edgeCount + triangleCount; } + } + + public SimplexCounts(int pointCount, int edgeCount, int triangleCount) + { + this.pointCount = pointCount; + this.edgeCount = edgeCount; + this.triangleCount = triangleCount; + } + + public int GetSimplexStartAndSize(int index, out int size) + { + if (index < triangleCount) + { + size = 3; + return index * 3; + } + else if (index < triangleCount + edgeCount) + { + size = 2; + return triangleCount * 3 + (index - triangleCount) * 2; + } + else if (index < simplexCount) + { + size = 1; + return triangleCount * 3 + edgeCount * 2 + (index - triangleCount - edgeCount); + } + size = 0; + return 0; + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/SimplexCounts.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/SimplexCounts.cs.meta new file mode 100644 index 00000000..f4cb6746 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/SimplexCounts.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4a445a209f673411391c60adfe8b4766 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/VInt4.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/VInt4.cs new file mode 100644 index 00000000..c0f3bc17 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/VInt4.cs @@ -0,0 +1,41 @@ +using System; +using System.Runtime.InteropServices; + +#if (OBI_MATHEMATICS) +using Unity.Mathematics; +#endif + + +namespace Obi +{ + [Serializable] + [StructLayout(LayoutKind.Sequential)] + public struct VInt4 + { + public int x; + public int y; + public int z; + public int w; + + public VInt4(int x, int y, int z, int w) + { + this.x = x; + this.y = y; + this.z = z; + this.w = w; + } + + public VInt4(int x) + { + this.x = x; + this.y = x; + 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/xiaofang/Assets/Obi/Scripts/Common/DataStructures/VInt4.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/VInt4.cs.meta new file mode 100644 index 00000000..b3084818 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/VInt4.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4509cf294c582479790fe1d6307b218c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization.meta new file mode 100644 index 00000000..a9e8fd40 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dfdbb639033814f7c94f5ad7f5bdb809 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/MeshVoxelizer.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/MeshVoxelizer.cs new file mode 100644 index 00000000..f68ae0b0 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/MeshVoxelizer.cs @@ -0,0 +1,607 @@ + +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Obi +{ + + /** + * Helper class that voxelizes a mesh. + */ + [Serializable] + public class MeshVoxelizer + { + [Flags] + public enum Voxel + { + Empty = 0, + Inside = 1 << 0, + Boundary = 1 << 1, + Outside = 1 << 2, + } + + public readonly static Vector3Int[] fullNeighborhood = + { + // face neighbors: + new Vector3Int(-1,0,0), + new Vector3Int(1,0,0), + new Vector3Int(0,-1,0), + new Vector3Int(0,1,0), + new Vector3Int(0,0,-1), + new Vector3Int(0,0,1), + + // edge neighbors: + new Vector3Int(-1,-1,0), + new Vector3Int(-1,0,-1), + new Vector3Int(-1,0,1), + new Vector3Int(-1,1,0), + new Vector3Int(0,-1,-1), + new Vector3Int(0,-1,1), + new Vector3Int(0,1,-1), + new Vector3Int(0,1,1), + new Vector3Int(1,-1,0), + new Vector3Int(1,0,-1), + new Vector3Int(1,0,1), + new Vector3Int(1,1,0), + + // vertex neighbors: + new Vector3Int(-1,-1,-1), + new Vector3Int(-1,-1,1), + new Vector3Int(-1,1,-1), + new Vector3Int(-1,1,1), + new Vector3Int(1,-1,-1), + new Vector3Int(1,-1,1), + new Vector3Int(1,1,-1), + new Vector3Int(1,1,1) + }; + + public readonly static Vector3Int[] edgefaceNeighborhood = + { + new Vector3Int(-1,-1,0), + new Vector3Int(-1,0,-1), + new Vector3Int(-1,0,0), + new Vector3Int(-1,0,1), + new Vector3Int(-1,1,0), + new Vector3Int(0,-1,-1), + new Vector3Int(0,-1,0), + new Vector3Int(0,-1,1), + new Vector3Int(0,0,-1), + new Vector3Int(0,0,1), + new Vector3Int(0,1,-1), + new Vector3Int(0,1,0), + new Vector3Int(0,1,1), + new Vector3Int(1,-1,0), + new Vector3Int(1,0,-1), + new Vector3Int(1,0,0), + new Vector3Int(1,0,1), + new Vector3Int(1,1,0) + }; + + public readonly static Vector3Int[] faceNeighborhood = + { + new Vector3Int(-1,0,0), + new Vector3Int(1,0,0), + new Vector3Int(0,-1,0), + new Vector3Int(0,1,0), + new Vector3Int(0,0,-1), + new Vector3Int(0,0,1) + }; + + public readonly static Vector3Int[] edgeNeighborhood = + { + new Vector3Int(-1,-1,0), + new Vector3Int(-1,0,-1), + new Vector3Int(-1,0,1), + new Vector3Int(-1,1,0), + new Vector3Int(0,-1,-1), + new Vector3Int(0,-1,1), + new Vector3Int(0,1,-1), + new Vector3Int(0,1,1), + new Vector3Int(1,-1,0), + new Vector3Int(1,0,-1), + new Vector3Int(1,0,1), + new Vector3Int(1,1,0) + }; + + public readonly static Vector3Int[] vertexNeighborhood = + { + new Vector3Int(-1,-1,-1), + new Vector3Int(-1,-1,1), + new Vector3Int(-1,1,-1), + new Vector3Int(-1,1,1), + new Vector3Int(1,-1,-1), + new Vector3Int(1,-1,1), + new Vector3Int(1,1,-1), + new Vector3Int(1,1,1) + }; + + [NonSerialized] public Mesh input; + + [HideInInspector][SerializeField] private Voxel[] voxels; + public float voxelSize; + public Vector3Int resolution; + + private List[] triangleIndices; // temporary structure to hold triangles overlapping each voxel. + private Vector3Int origin; + + public Vector3Int Origin + { + get { return origin; } + } + + public int voxelCount + { + get { return resolution.x * resolution.y * resolution.z; } + } + + public MeshVoxelizer(Mesh input, float voxelSize) + { + this.input = input; + this.voxelSize = voxelSize; + } + + public Voxel this[int x, int y, int z] + { + get { return voxels[GetVoxelIndex(x, y, z)]; } + set { voxels[GetVoxelIndex(x, y, z)] = value; } + } + + public float GetDistanceToNeighbor(int i) + { + if (i > 17) return ObiUtils.sqrt3 * voxelSize; + if (i > 5) return ObiUtils.sqrt2 * voxelSize; + return voxelSize; + } + + public int GetVoxelIndex(int x, int y, int z) + { + return x + resolution.x * (y + resolution.y * z); + } + + public Vector3 GetVoxelCenter(in Vector3Int coords) + { + return new Vector3(Origin.x + coords.x + 0.5f, + Origin.y + coords.y + 0.5f, + Origin.z + coords.z + 0.5f) * voxelSize; + } + + private Bounds GetTriangleBounds(in Vector3 v1, in Vector3 v2, in Vector3 v3) + { + Bounds b = new Bounds(v1, Vector3.zero); + b.Encapsulate(v2); + b.Encapsulate(v3); + return b; + } + + public List GetTrianglesOverlappingVoxel(int voxelIndex) + { + if (voxelIndex >= 0 && voxelIndex < triangleIndices.Length) + return triangleIndices[voxelIndex]; + return null; + } + + public Vector3Int GetPointVoxel(in Vector3 point) + { + return new Vector3Int(Mathf.FloorToInt(point.x / voxelSize), + Mathf.FloorToInt(point.y / voxelSize), + Mathf.FloorToInt(point.z / voxelSize)); + } + + public bool VoxelExists(in Vector3Int coords) + { + return VoxelExists(coords.x, coords.y, coords.z); + } + + public bool VoxelExists(int x, int y, int z) + { + return x >= 0 && y >= 0 && z >= 0 && + x < resolution.x && + y < resolution.y && + z < resolution.z; + } + + private void AppendOverlappingVoxels(in Bounds bounds, in Vector3 v1, in Vector3 v2, in Vector3 v3, int triangleIndex) + { + + Vector3Int min = GetPointVoxel(bounds.min); + Vector3Int max = GetPointVoxel(bounds.max); + + for (int x = min.x; x <= max.x; ++x) + for (int y = min.y; y <= max.y; ++y) + for (int z = min.z; z <= max.z; ++z) + { + Bounds voxel = new Bounds(new Vector3(x + 0.5f, y + 0.5f, z + 0.5f) * voxelSize, Vector3.one * voxelSize); + + if (IsIntersecting(voxel, v1, v2, v3)) + { + int index = GetVoxelIndex(x - origin.x, y - origin.y, z - origin.z); + voxels[index] = Voxel.Boundary; + + if (triangleIndices != null) + triangleIndices[index].Add(triangleIndex); + } + } + } + + + public IEnumerator Voxelize(Matrix4x4 transform, 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); + + resolution = new Vector3Int(max.x - origin.x + 1, max.y - origin.y + 1, max.z - origin.z + 1); + + // Allocate voxels array, and initialize them to "inside" the mesh: + voxels = new Voxel[resolution.x * resolution.y * resolution.z]; + + for (int x = 0; x < resolution.x; ++x) + for (int y = 0; y < resolution.y; ++y) + for (int z = 0; z < resolution.z; ++z) + this[x, y, z] = Voxel.Inside; + + // Allocate triangle lists: + if (generateTriangleIndices) + { + triangleIndices = new List[voxels.Length]; + for (int i = 0; i < triangleIndices.Length; ++i) + triangleIndices[i] = new List(4); + } + else + triangleIndices = null; + + // Get input triangles and vertices: + int[] triIndices = input.triangles; + Vector3[] vertices = input.vertices; + + // 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]]); + + Bounds triBounds = GetTriangleBounds(v1, v2, v3); + + AppendOverlappingVoxels(triBounds, v1, v2, v3, i/3); + + if (i % 150 == 0) + yield return new CoroutineJob.ProgressInfo("Voxelizing mesh...", i / (float)triIndices.Length); + } + + // Flood fill outside the mesh. This deals with multiple disjoint regions, and non-watertight models. + var fillCoroutine = FloodFill(); + while (fillCoroutine.MoveNext()) + yield return fillCoroutine.Current; + } + + // Ensures boundary is only one voxel thick. + public void BoundaryThinning() + { + 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 % faceNeighborhood.Length != 0 && 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(); + queue.Enqueue(new Vector3Int(0, 0, 0)); + + this[0, 0, 0] = Voxel.Outside; + + int i = 0; + while (queue.Count > 0) + { + Vector3Int c = queue.Dequeue(); + Vector3Int v; + + if (c.x < resolution.x - 1 && this[c.x + 1, c.y, c.z] == Voxel.Inside) + { + v = new Vector3Int(c.x + 1, c.y, c.z); + this[v.x, v.y, v.z] = Voxel.Outside; + queue.Enqueue(v); + } + if (c.x > 0 && this[c.x - 1, c.y, c.z] == Voxel.Inside) + { + v = new Vector3Int(c.x - 1, c.y, c.z); + this[v.x, v.y, v.z] = Voxel.Outside; + queue.Enqueue(v); + } + if (c.y < resolution.y - 1 && this[c.x, c.y + 1, c.z] == Voxel.Inside) + { + v = new Vector3Int(c.x, c.y + 1, c.z); + this[v.x, v.y, v.z] = Voxel.Outside; + queue.Enqueue(v); + } + if (c.y > 0 && this[c.x, c.y - 1, c.z] == Voxel.Inside ) + { + v = new Vector3Int(c.x, c.y - 1, c.z); + this[v.x, v.y, v.z] = Voxel.Outside; + queue.Enqueue(v); + } + + if (c.z < resolution.z - 1 && this[c.x, c.y, c.z + 1] == Voxel.Inside) + { + v = new Vector3Int(c.x, c.y, c.z + 1); + this[v.x, v.y, v.z] = Voxel.Outside; + queue.Enqueue(v); + } + if (c.z > 0 && this[c.x, c.y, c.z - 1] == Voxel.Inside) + { + v = new Vector3Int(c.x, c.y, c.z - 1); + this[v.x, v.y, v.z] = Voxel.Outside; + queue.Enqueue(v); + } + + if (++i % 150 == 0) + yield return new CoroutineJob.ProgressInfo("Filling mesh...", i / (float)voxels.Length); + } + } + + public static bool IsIntersecting(in Bounds box, Vector3 v1, Vector3 v2, Vector3 v3) + { + v1 -= box.center; + v2 -= box.center; + v3 -= box.center; + + var ab = v2 - v1; + var bc = v3 - v2; + var ca = v1 - v3; + + //cross with (1, 0, 0) + var a00 = new Vector3(0, -ab.z, ab.y); + var a01 = new Vector3(0, -bc.z, bc.y); + var a02 = new Vector3(0, -ca.z, ca.y); + + //cross with (0, 1, 0) + var a10 = new Vector3(ab.z, 0, -ab.x); + var a11 = new Vector3(bc.z, 0, -bc.x); + var a12 = new Vector3(ca.z, 0, -ca.x); + + //cross with (0, 0, 1) + var a20 = new Vector3(-ab.y, ab.x, 0); + var a21 = new Vector3(-bc.y, bc.x, 0); + var a22 = new Vector3(-ca.y, ca.x, 0); + + if ( + !TriangleAabbSATTest(v1, v2, v3, box.extents, a00) || + !TriangleAabbSATTest(v1, v2, v3, box.extents, a01) || + !TriangleAabbSATTest(v1, v2, v3, box.extents, a02) || + !TriangleAabbSATTest(v1, v2, v3, box.extents, a10) || + !TriangleAabbSATTest(v1, v2, v3, box.extents, a11) || + !TriangleAabbSATTest(v1, v2, v3, box.extents, a12) || + !TriangleAabbSATTest(v1, v2, v3, box.extents, a20) || + !TriangleAabbSATTest(v1, v2, v3, box.extents, a21) || + !TriangleAabbSATTest(v1, v2, v3, box.extents, a22) || + !TriangleAabbSATTest(v1, v2, v3, box.extents, Vector3.right) || + !TriangleAabbSATTest(v1, v2, v3, box.extents, Vector3.up) || + !TriangleAabbSATTest(v1, v2, v3, box.extents, Vector3.forward) || + !TriangleAabbSATTest(v1, v2, v3, box.extents, Vector3.Cross(ab, bc)) + ) + return false; + + return true; + } + + static bool TriangleAabbSATTest(in Vector3 v0, in Vector3 v1, in Vector3 v2, in Vector3 aabbExtents, in Vector3 axis) + { + float p0 = Vector3.Dot(v0, axis); + float p1 = Vector3.Dot(v1, axis); + float p2 = Vector3.Dot(v2, axis); + + float r = aabbExtents.x * Mathf.Abs(axis.x) + + aabbExtents.y * Mathf.Abs(axis.y) + + aabbExtents.z * Mathf.Abs(axis.z); + + float maxP = Mathf.Max(p0, Mathf.Max(p1, p2)); + float minP = Mathf.Min(p0, Mathf.Min(p1, p2)); + + return !(Mathf.Max(-maxP, minP) > r); + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/MeshVoxelizer.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/MeshVoxelizer.cs.meta new file mode 100644 index 00000000..3feb9ced --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/MeshVoxelizer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d719a609a88a842d8b4a10db447a627c +timeCreated: 1521796043 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/PriorityQueue.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/PriorityQueue.cs new file mode 100644 index 00000000..63c1b3dc --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/PriorityQueue.cs @@ -0,0 +1,101 @@ +using System; +using System.Collections.Generic; + +namespace Obi +{ + + // From https://visualstudiomagazine.com/articles/2012/11/01/priority-queues-with-c.aspx + public class PriorityQueue where T : IComparable + { + public List data; + + public PriorityQueue() + { + this.data = new List(); + } + + public void Enqueue(T item) + { + data.Add(item); + int ci = data.Count - 1; // child index; start at end + while (ci > 0) + { + int pi = (ci - 1) / 2; // parent index + if (data[ci].CompareTo(data[pi]) >= 0) break; // child item is larger than (or equal) parent so we're done + T tmp = data[ci]; data[ci] = data[pi]; data[pi] = tmp; + ci = pi; + } + } + + public T Dequeue() + { + // assumes pq is not empty; up to calling code + int li = data.Count - 1; // last index (before removal) + T frontItem = data[0]; // fetch the front + data[0] = data[li]; + data.RemoveAt(li); + + --li; // last index (after removal) + int pi = 0; // parent index. start at front of pq + while (true) + { + int ci = pi * 2 + 1; // left child index of parent + if (ci > li) break; // no children so done + int rc = ci + 1; // right child + if (rc <= li && data[rc].CompareTo(data[ci]) < 0) // if there is a rc (ci + 1), and it is smaller than left child, use the rc instead + ci = rc; + if (data[pi].CompareTo(data[ci]) <= 0) break; // parent is smaller than (or equal to) smallest child so done + T tmp = data[pi]; data[pi] = data[ci]; data[ci] = tmp; // swap parent and child + pi = ci; + } + return frontItem; + } + + public T Peek() + { + T frontItem = data[0]; + return frontItem; + } + + public IEnumerable GetEnumerator() + { + for (int i = 0; i < data.Count; ++i) + yield return data[i]; + } + + public void Clear() + { + data.Clear(); + } + + public int Count() + { + return data.Count; + } + + public override string ToString() + { + string s = ""; + for (int i = 0; i < data.Count; ++i) + s += data[i].ToString() + " "; + s += "count = " + data.Count; + return s; + } + + public bool IsConsistent() + { + // is the heap property true for all data? + if (data.Count == 0) return true; + int li = data.Count - 1; // last index + for (int pi = 0; pi < data.Count; ++pi) // each parent index + { + int lci = 2 * pi + 1; // left child index + int rci = 2 * pi + 2; // right child index + + if (lci <= li && data[pi].CompareTo(data[lci]) > 0) return false; // if lc exists and it's greater than parent then bad. + if (rci <= li && data[pi].CompareTo(data[rci]) > 0) return false; // check the right child too. + } + return true; // passed all checks + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/PriorityQueue.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/PriorityQueue.cs.meta new file mode 100644 index 00000000..5b691875 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/PriorityQueue.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df456c360bde341bca8e2bfd472e9bcb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelDistanceField.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelDistanceField.cs new file mode 100644 index 00000000..8484fbfd --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelDistanceField.cs @@ -0,0 +1,190 @@ +using System.Collections; +using UnityEngine; + +namespace Obi +{ + + /** + * Generates a sparse distance field from a voxel representation of a mesh. + */ + public class VoxelDistanceField + { + public Vector3Int[,,] distanceField; // for each coordinate, stores coordinates of closest surface voxel. + + private MeshVoxelizer voxelizer; + + public VoxelDistanceField(MeshVoxelizer voxelizer) + { + this.voxelizer = voxelizer; + } + + public float SampleUnfiltered(int x, int y, int z) + { + if (!voxelizer.VoxelExists(x, y, z)) return float.PositiveInfinity; + + float dist = Vector3.Distance(voxelizer.GetVoxelCenter(distanceField[x, y, z]), + voxelizer.GetVoxelCenter(new Vector3Int(x, y, z))); + + if (voxelizer[x, y, z] == MeshVoxelizer.Voxel.Inside) + return -dist; + return dist; + } + + public Vector4 SampleFiltered(float x, float y, float z) + { + var pos = new Vector3(x, y, z); + + // clamp position inside the distance field: + 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; + + var voxelCenter = voxelizer.GetVoxelCenter(voxel); + var norm = (pos - voxelCenter) / voxelizer.voxelSize; + + 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); + + 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); + + 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); + + float Y1 = Mathf.Lerp(X1, X2, norm.z); + float Y2 = Mathf.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)); + } + + public IEnumerator JumpFlood() + { + + // 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); + else + distanceField[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 step = (int)(size / 2.0f); + + yield return new CoroutineJob.ProgressInfo("Generating voxel distance field...",0); + + float numPasses = (int) Mathf.Log(size, 2); + int i = 0; + + // jump flood passes: + while (step >= 1) + { + JumpFloodPass(step, distanceField, auxBuffer); + + // halve step: + step /= 2; + + // swap buffers: + Vector3Int[,,] temp = distanceField; + distanceField = auxBuffer; + auxBuffer = temp; + + yield return new CoroutineJob.ProgressInfo("Generating voxel distance field...", ++i / numPasses); + } + + } + + private void JumpFloodPass(int stride, Vector3Int[,,] input, Vector3Int[,,] output) + { + // for each voxel: + for (int x = 0; x < input.GetLength(0); ++x) + for (int y = 0; y < input.GetLength(1); ++y) + for (int z = 0; z < input.GetLength(2); ++z) + { + // our position: + Vector3Int p = new Vector3Int(x, y, z); + + // our seed: + Vector3Int s = input[x, y, z]; + + // copy the closest seed to the output, in case we do not update it this pass: + output[x, y, z] = s; + + // this voxel is a seed, skip it. + if (s.x == x && s.y == y && s.z == z) + continue; + + // distance to our closest seed: + float dist = float.MaxValue; + if (s.x >= 0) + 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) + { + // neighbor's position: + int px = x + nx * stride; + int py = y + ny * stride; + int pz = z + nz * stride; + + if (voxelizer.VoxelExists(px,py,pz)) + { + // 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; + } + } + } + } + } + + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelDistanceField.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelDistanceField.cs.meta new file mode 100644 index 00000000..84c75c21 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelDistanceField.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c65cc27d2e30248c5afce6392f782c11 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelPathFinder.cs b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelPathFinder.cs new file mode 100644 index 00000000..8ac2788b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelPathFinder.cs @@ -0,0 +1,135 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public class VoxelPathFinder + { + private MeshVoxelizer voxelizer = null; + private bool[,,] closed; + private PriorityQueue open; + + public struct TargetVoxel : IEquatable, IComparable + { + public Vector3Int coordinates; + public float distance; + public float heuristic; + //public TargetVoxel parent; + + public float cost + { + get { return distance + heuristic; } + } + + public TargetVoxel(Vector3Int coordinates, float distance, float heuristic) + { + this.coordinates = coordinates; + this.distance = distance; + this.heuristic = heuristic; + } + + public bool Equals(TargetVoxel other) + { + return this.coordinates.Equals(other.coordinates); + } + + public int CompareTo(TargetVoxel other) + { + return this.cost.CompareTo(other.cost); + } + } + + public VoxelPathFinder(MeshVoxelizer voxelizer) + { + this.voxelizer = voxelizer; + closed = new bool[voxelizer.resolution.x, voxelizer.resolution.y, voxelizer.resolution.z]; + open = new PriorityQueue(); + } + + private TargetVoxel AStar(in Vector3Int start, Func termination, Func heuristic) + { + Array.Clear(closed, 0, closed.Length); + + // A* algorithm: + open.Clear(); + open.Enqueue(new TargetVoxel(start, 0, 0)); + + while (open.Count() != 0) + { + var current = open.Dequeue(); + + if (termination(current)) + return current; + + closed[current.coordinates.x, current.coordinates.y, current.coordinates.z] = true; + + for (int i = 0; i < MeshVoxelizer.fullNeighborhood.Length; ++i) + { + var successorCoords = current.coordinates + MeshVoxelizer.fullNeighborhood[i]; + + if (voxelizer.VoxelExists(successorCoords) && + voxelizer[successorCoords.x, successorCoords.y, successorCoords.z] != MeshVoxelizer.Voxel.Outside && + !closed[successorCoords.x, successorCoords.y, successorCoords.z]) + { + var successor = new TargetVoxel(successorCoords, current.distance + voxelizer.GetDistanceToNeighbor(i), + heuristic(successorCoords)); + //successor.parent = current; + + int index = -1; + for (int j = 0; j < open.Count(); ++j) + if (open.data[j].coordinates == successorCoords) + { index = j; break; } + + if (index < 0) + open.Enqueue(successor); + else if (successor.distance < open.data[index].distance) + open.data[index] = successor; + } + } + } + + return new TargetVoxel(Vector3Int.zero, -1, -1); + } + + public TargetVoxel FindClosestNonEmptyVoxel(in Vector3Int start) + { + if (voxelizer == null) return new TargetVoxel(Vector3Int.zero, -1, -1); + + if (!voxelizer.VoxelExists(start)) + return new TargetVoxel(Vector3Int.zero, -1, -1); + + if (voxelizer[start.x, start.y, start.z] != MeshVoxelizer.Voxel.Outside) + return new TargetVoxel(start, 0, 0); + + Array.Clear(closed, 0, closed.Length); + + return AStar(start, + (TargetVoxel v) => { + return voxelizer[v.coordinates.x, v.coordinates.y, v.coordinates.z] != MeshVoxelizer.Voxel.Outside; + }, + (Vector3Int c) => { + return 0; + }); + } + + public TargetVoxel FindPath(in Vector3Int start, Vector3Int end) + { + if (voxelizer == null) return new TargetVoxel(Vector3Int.zero,-1, -1); + + if (!voxelizer.VoxelExists(start) || !voxelizer.VoxelExists(end)) + return new TargetVoxel(Vector3Int.zero, -1, -1); + + if (voxelizer[start.x, start.y, start.z] == MeshVoxelizer.Voxel.Outside || + voxelizer[end.x, end.y, end.z] == MeshVoxelizer.Voxel.Outside) + return new TargetVoxel(Vector3Int.zero, -1, -1); + + return AStar(start, + (TargetVoxel v) => { + return v.coordinates == end; + }, + (Vector3Int c) => { + return Vector3.Distance(c, end) * voxelizer.voxelSize; + }); + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelPathFinder.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelPathFinder.cs.meta new file mode 100644 index 00000000..a41bf458 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelPathFinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e4d304562b1140b8a161652aaf4f122 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/ObiEditorSettings.cs b/xiaofang/Assets/Obi/Scripts/Common/ObiEditorSettings.cs new file mode 100644 index 00000000..1a48a23f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/ObiEditorSettings.cs @@ -0,0 +1,94 @@ +using UnityEngine; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace Obi +{ + public class ObiEditorSettings : ScriptableObject + { + public const string m_ObiEditorSettingsPath = "Assets/ObiEditorSettings.asset"; + + [SerializeField] private Color m_ParticleBrush; + [SerializeField] private Color m_BrushWireframe; + [SerializeField] private Color m_Particle; + [SerializeField] private Color m_SelectedParticle; + [SerializeField] private Color m_ActiveParticle; + [SerializeField] private Gradient m_PropertyGradient; + [SerializeField] private bool m_ParticlePicking; + + public Color brushColor + { + get { return m_ParticleBrush; } + } + public Color brushWireframeColor + { + get { return m_BrushWireframe; } + } + public Color particleColor + { + get { return m_Particle; } + } + public Color selectedParticleColor + { + get { return m_SelectedParticle; } + } + public Color activeParticleColor + { + get { return m_ActiveParticle; } + } + public Gradient propertyGradient + { + get { return m_PropertyGradient; } + } + public bool sceneViewParticlePicking + { + get { return m_ParticlePicking; } + } + +#if UNITY_EDITOR + public static ObiEditorSettings GetOrCreateSettings() + { + var settings = AssetDatabase.LoadAssetAtPath(m_ObiEditorSettingsPath); + if (settings == null) + { + settings = ScriptableObject.CreateInstance(); + settings.m_ParticleBrush = new Color32(243, 77, 43, 255); + settings.m_BrushWireframe = new Color32(0, 0, 0, 128); + settings.m_Particle = new Color32(240, 240, 240, 255); + 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]; + colorKey[0].color = Color.grey * 0.7f; + colorKey[0].time = 0.0f; + colorKey[1].color = Color.white; + colorKey[1].time = 1.0f; + + // Populate the alpha keys at relative time 0 and 1 (0 and 100%) + var alphaKey = new GradientAlphaKey[2]; + alphaKey[0].alpha = 1.0f; + alphaKey[0].time = 0.0f; + alphaKey[1].alpha = 1.0f; + alphaKey[1].time = 1.0f; + + settings.m_PropertyGradient.SetKeys(colorKey, alphaKey); + + AssetDatabase.CreateAsset(settings, m_ObiEditorSettingsPath); + AssetDatabase.SaveAssets(); + } + return settings; + } + + + public static SerializedObject GetSerializedSettings() + { + return new SerializedObject(GetOrCreateSettings()); + } +#endif + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/ObiEditorSettings.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/ObiEditorSettings.cs.meta new file mode 100644 index 00000000..ba5f3378 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/ObiEditorSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7971633b9741349f3add282a07b0d69b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Rendering.meta b/xiaofang/Assets/Obi/Scripts/Common/Rendering.meta new file mode 100644 index 00000000..750a354b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Rendering.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 01dd4c104c0244e66a3ed4b9824df2b3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Rendering/DataBatches.meta b/xiaofang/Assets/Obi/Scripts/Common/Rendering/DataBatches.meta new file mode 100644 index 00000000..3fd71cf2 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Rendering/DataBatches.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 13ef5aa25fc194dda8d453b36a50e5d0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Rendering/DataBatches/MeshDataBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Rendering/DataBatches/MeshDataBatch.cs new file mode 100644 index 00000000..7f836204 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Rendering/DataBatches/MeshDataBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Rendering/DataBatches/MeshDataBatch.cs.meta new file mode 100644 index 00000000..a116f658 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Rendering/DataBatches/SkeletonDataBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Rendering/DataBatches/SkeletonDataBatch.cs new file mode 100644 index 00000000..0d4c0841 --- /dev/null +++ b/xiaofang/Assets/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.localScale; + 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/xiaofang/Assets/Obi/Scripts/Common/Rendering/DataBatches/SkeletonDataBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Rendering/DataBatches/SkeletonDataBatch.cs.meta new file mode 100644 index 00000000..cad0d32b --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Rendering/ISurfaceChunkUser.cs b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ISurfaceChunkUser.cs new file mode 100644 index 00000000..91f76b01 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Rendering/ISurfaceChunkUser.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ISurfaceChunkUser.cs.meta new file mode 100644 index 00000000..ffcc1476 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiActorRenderer.cs b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiActorRenderer.cs new file mode 100644 index 00000000..3fc67069 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiActorRenderer.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiActorRenderer.cs.meta new file mode 100644 index 00000000..8dd78451 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiDistanceFieldRenderer.cs b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiDistanceFieldRenderer.cs new file mode 100644 index 00000000..2f0344d6 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiDistanceFieldRenderer.cs @@ -0,0 +1,166 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [AddComponentMenu("Physics/Obi/Obi Distance Field Renderer", 1003)] + [ExecuteInEditMode] + [RequireComponent(typeof(ObiCollider))] + public class ObiDistanceFieldRenderer : MonoBehaviour + { + public enum Axis + { + X = 0, + Y = 1, + Z = 2, + } + + public Axis axis; + [Range(0, 1)] + public float slice = 0.25f; + public float maxDistance = 0.5f; + + private ObiCollider unityCollider; + private Material material; + private Mesh planeMesh; + private Texture2D cutawayTexture; + + private float sampleSize; + private int sampleCount; + + private Color boundsColor = new Color(1, 1, 1, 0.5f); + + public void Awake() + { + unityCollider = GetComponent(); + } + + public void OnEnable() + { + material = GameObject.Instantiate(Resources.Load("ObiMaterials/DistanceFields/DistanceFieldRendering")); + material.hideFlags = HideFlags.HideAndDontSave; + } + + public void OnDisable() + { + Cleanup(); + } + + private void Cleanup() + { + GameObject.DestroyImmediate(cutawayTexture); + GameObject.DestroyImmediate(planeMesh); + GameObject.DestroyImmediate(material); + } + + private void ResizeTexture() + { + + if (cutawayTexture == null) + { + cutawayTexture = new Texture2D(sampleCount, sampleCount, TextureFormat.RHalf, false); + cutawayTexture.wrapMode = TextureWrapMode.Clamp; + cutawayTexture.hideFlags = HideFlags.HideAndDontSave; + } + else + cutawayTexture.Reinitialize(sampleCount, sampleCount); + } + + private void CreatePlaneMesh(ObiDistanceField field) + { + + if (field != null && planeMesh == null) + { + + float uvBorder = (1 - field.FieldBounds.size[0] / (sampleSize * sampleCount)) * 0.5f; + + planeMesh = new Mesh(); + + planeMesh.vertices = new Vector3[]{new Vector3(-0.5f,-0.5f,0), + new Vector3(0.5f,-0.5f,0), + new Vector3(-0.5f,0.5f,0), + new Vector3(0.5f,0.5f,0)}; + + planeMesh.uv = new Vector2[]{new Vector2(uvBorder,uvBorder), + new Vector2(1-uvBorder,uvBorder), + new Vector2(uvBorder,1-uvBorder), + new Vector2(1-uvBorder,1-uvBorder)}; + + planeMesh.normals = new Vector3[] { -Vector3.forward, -Vector3.forward, -Vector3.forward, -Vector3.forward }; + planeMesh.triangles = new int[] { 0, 2, 1, 2, 3, 1 }; + } + } + + private void RefreshCutawayTexture(ObiDistanceField field) + { + if (field == null) + return; + + Bounds b = field.FieldBounds; + sampleSize = field.EffectiveSampleSize; + sampleCount = (int)(b.size[0] / sampleSize) + 1; + + CreatePlaneMesh(field); + ResizeTexture(); + + float sweep = (sampleCount * slice) * sampleSize; + Vector3 origin = b.center - b.extents; + + for (int x = 0; x < sampleCount; ++x) + for (int y = 0; y < sampleCount; ++y) + { + Vector3 offset = Vector3.zero; + switch (axis) + { + case Axis.X: offset = new Vector3(sweep, y * sampleSize, x * sampleSize); break; + case Axis.Y: offset = new Vector3(x * sampleSize, sweep, y * sampleSize); break; + case Axis.Z: offset = new Vector3(x * sampleSize, y * sampleSize, sweep); break; + } + + float distance = ASDF.Sample(field.nodes, origin + offset); + + float value = ObiUtils.Remap(distance, -maxDistance, maxDistance, 0, 1); + + cutawayTexture.SetPixel(x, y, new Color(value, 0, 0)); + } + cutawayTexture.Apply(); + } + + private void DrawCutawayPlane(ObiDistanceField field, Matrix4x4 matrix) + { + + if (field == null) + return; + + RefreshCutawayTexture(field); + + material.mainTexture = cutawayTexture; + material.SetPass(0); + + Quaternion rotation = Quaternion.identity; + Vector3 offset = Vector3.zero; + offset[(int)axis] = field.FieldBounds.size[0]; + + if (axis == Axis.Y) + rotation = Quaternion.Euler(90, 0, 0); + else if (axis == Axis.X) + rotation = Quaternion.Euler(0, -90, 0); + + Matrix4x4 sc = Matrix4x4.TRS(field.FieldBounds.center + offset * (slice - 0.5f), rotation, Vector3.one * field.FieldBounds.size[0]); + Graphics.DrawMeshNow(planeMesh, matrix * sc); + + } + + public void OnDrawGizmos() + { + if (unityCollider != null && unityCollider.distanceField != null && unityCollider.distanceField.Initialized && material != null) + { + DrawCutawayPlane(unityCollider.distanceField, transform.localToWorldMatrix); + Gizmos.color = boundsColor; + Gizmos.DrawWireCube(unityCollider.distanceField.FieldBounds.center, unityCollider.distanceField.FieldBounds.size); + } + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiDistanceFieldRenderer.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiDistanceFieldRenderer.cs.meta new file mode 100644 index 00000000..daf2292b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiDistanceFieldRenderer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 382f1f06ad1a84a9f8fb3a60b50dd9b7 +timeCreated: 1516041863 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 41cb9d55de5b24458b45e5465606249a, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiFoamRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiFoamRenderSystem.cs new file mode 100644 index 00000000..93b90620 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiFoamRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiFoamRenderSystem.cs.meta new file mode 100644 index 00000000..7536fe66 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderSystem.cs new file mode 100644 index 00000000..1977c446 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderSystem.cs.meta new file mode 100644 index 00000000..d62f80c8 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderer.cs b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderer.cs new file mode 100644 index 00000000..e7681459 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderer.cs @@ -0,0 +1,63 @@ +using UnityEngine; +using Unity.Profiling; +using System; +using System.Threading; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + + [AddComponentMenu("Physics/Obi/Obi Instanced Particle Renderer", 1001)] + [ExecuteInEditMode] + [RequireComponent(typeof(ObiActor))] + public class ObiInstancedParticleRenderer : MonoBehaviour, ObiActorRenderer + { + public Mesh mesh; + public Material material; + public RenderBatchParams renderParameters = new RenderBatchParams(true); + public Color instanceColor = Color.white; + public float instanceScale = 1; + + public ObiActor actor { get; private set; } + + void Awake() + { + actor = GetComponent(); + } + + public void OnEnable() + { + ((ObiActorRenderer)this).EnableRenderer(); + } + + public void OnDisable() + { + ((ObiActorRenderer)this).DisableRenderer(); + } + + public void OnValidate() + { + ((ObiActorRenderer)this).SetRendererDirty(Oni.RenderingSystemType.InstancedParticles); + } + + RenderSystem ObiRenderer.CreateRenderSystem(ObiSolver solver) + { + switch (solver.backendType) + { + +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) + case ObiSolver.BackendType.Burst: return new BurstInstancedParticleRenderSystem(solver); +#endif + case ObiSolver.BackendType.Compute: + default: + + if (SystemInfo.supportsComputeShaders) + return new ComputeInstancedParticleRenderSystem(solver); + return null; + } + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderer.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderer.cs.meta new file mode 100644 index 00000000..02842862 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 356b834afda224f73a26e39580b330f1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} + - material: {fileID: 2100000, guid: 2b7dfa8ebb76247318ce5b7df4b97484, type: 2} + executionOrder: 0 + icon: {fileID: 2800000, guid: f424a87c9f03240c2870a664731ac9aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiParticleRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiParticleRenderSystem.cs new file mode 100644 index 00000000..b84ed1b3 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiParticleRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiParticleRenderSystem.cs.meta new file mode 100644 index 00000000..e2307d23 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiParticleRenderer.cs b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiParticleRenderer.cs new file mode 100644 index 00000000..ab677004 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiParticleRenderer.cs @@ -0,0 +1,78 @@ +using UnityEngine; + +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, IParticleRenderer, ObiActorRenderer + { + public Material material; + public RenderBatchParams renderParameters = new RenderBatchParams(true); + + [field: SerializeField] + public Color particleColor { get; set; } = Color.white; + + [field: SerializeField] + public float radiusScale { get; set; } = 1; + + public ObiActor actor { get; private set; } + + 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.Particles); + } + + RenderSystem ObiRenderer.CreateRenderSystem(ObiSolver solver) + { + switch (solver.backendType) + { + +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) + case ObiSolver.BackendType.Burst: return new BurstParticleRenderSystem(solver); +#endif + case ObiSolver.BackendType.Compute: + default: + + if (SystemInfo.supportsComputeShaders) + return new ComputeParticleRenderSystem(solver); + return null; + } + } + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiParticleRenderer.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiParticleRenderer.cs.meta new file mode 100644 index 00000000..58bfe07b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiParticleRenderer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c8b45ebbf86be4df6b0e6cd933812af2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - material: {fileID: 2100000, guid: fb88690dea2394644849cde5abd037f9, type: 2} + executionOrder: 0 + icon: {fileID: 2800000, guid: f424a87c9f03240c2870a664731ac9aa, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiRenderer.cs b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiRenderer.cs new file mode 100644 index 00000000..99e1277b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiRenderer.cs @@ -0,0 +1,63 @@ +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) + { + system.AddRenderer((T)this); + solver.dirtyRendering |= (int)system.typeEnum; + return true; + } + } + + return false; + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiRenderer.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ObiRenderer.cs.meta new file mode 100644 index 00000000..ae92becb --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Rendering/ParticleImpostorRendering.cs b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ParticleImpostorRendering.cs new file mode 100644 index 00000000..5a90e277 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ParticleImpostorRendering.cs @@ -0,0 +1,164 @@ +using UnityEngine; +using Unity.Profiling; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + public class ParticleImpostorRendering + { + static ProfilerMarker m_ParticlesToMeshPerfMarker = new ProfilerMarker("ParticlesToMesh"); + + private List meshes = new List(); + + private List vertices = new List(4000); + private List normals = new List(4000); + private List colors = new List(4000); + private List triangles = new List(6000); + + private List anisotropy1 = new List(4000); + private List anisotropy2 = new List(4000); + private List anisotropy3 = new List(4000); + + int particlesPerDrawcall = 0; + int drawcallCount; + + private Vector3 particleOffset0 = new Vector3(1, 1, 0); + private Vector3 particleOffset1 = new Vector3(-1, 1, 0); + private Vector3 particleOffset2 = new Vector3(-1, -1, 0); + private Vector3 particleOffset3 = new Vector3(1, -1, 0); + + public IEnumerable Meshes + { + get { return meshes.AsReadOnly(); } + } + + private void Apply(Mesh mesh) + { + mesh.Clear(); + mesh.SetVertices(vertices); + mesh.SetNormals(normals); + mesh.SetColors(colors); + mesh.SetUVs(0, anisotropy1); + mesh.SetUVs(1, anisotropy2); + mesh.SetUVs(2, anisotropy3); + mesh.SetTriangles(triangles, 0, true); + } + + public void ClearMeshes() + { + foreach (Mesh mesh in meshes) + GameObject.DestroyImmediate(mesh); + meshes.Clear(); + } + + public void UpdateMeshes(IObiParticleCollection collection, bool[] visible = null, Color[] tint = null) + { + using (m_ParticlesToMeshPerfMarker.Auto()) + { + + // figure out the size of our drawcall arrays: + particlesPerDrawcall = Constants.maxVertsPerMesh / 4; + drawcallCount = collection.activeParticleCount / particlesPerDrawcall + 1; + particlesPerDrawcall = Mathf.Min(particlesPerDrawcall, collection.activeParticleCount); + + // If the amount of meshes we need to draw the particles has changed: + if (drawcallCount != meshes.Count) + { + + // Re-generate meshes: + ClearMeshes(); + for (int i = 0; i < drawcallCount; i++) + { + Mesh mesh = new Mesh(); + mesh.name = "Particle impostors"; + mesh.hideFlags = HideFlags.HideAndDontSave; + meshes.Add(mesh); + } + + } + + Vector3 position; + Vector4 basis1 = new Vector4(1, 0, 0, 0); + Vector4 basis2 = new Vector4(0, 1, 0, 0); + Vector4 basis3 = new Vector4(0, 0, 1, 0); + Color color; + + int visibleLength = visible != null ? visible.Length : 0; + int tintLength = tint != null ? tint.Length : 0; + + //Convert particle data to mesh geometry: + for (int i = 0; i < drawcallCount; i++) + { + + // Clear all arrays + vertices.Clear(); + normals.Clear(); + colors.Clear(); + triangles.Clear(); + anisotropy1.Clear(); + anisotropy2.Clear(); + anisotropy3.Clear(); + + int index = 0; + int limit = Mathf.Min((i + 1) * particlesPerDrawcall, collection.activeParticleCount); + + for (int j = i * particlesPerDrawcall; j < limit; ++j) + { + if (j < visibleLength && !visible[j]) + continue; + + int runtimeIndex = collection.GetParticleRuntimeIndex(j); + position = collection.GetParticlePosition(runtimeIndex); + collection.GetParticleAnisotropy(runtimeIndex, ref basis1, ref basis2, ref basis3); + color = collection.GetParticleColor(runtimeIndex); + + if (j < tintLength) + color *= tint[j]; + + vertices.Add(position); + vertices.Add(position); + vertices.Add(position); + vertices.Add(position); + + normals.Add(particleOffset0); + normals.Add(particleOffset1); + normals.Add(particleOffset2); + normals.Add(particleOffset3); + + colors.Add(color); + colors.Add(color); + colors.Add(color); + colors.Add(color); + + anisotropy1.Add(basis1); + anisotropy1.Add(basis1); + anisotropy1.Add(basis1); + anisotropy1.Add(basis1); + + anisotropy2.Add(basis2); + anisotropy2.Add(basis2); + anisotropy2.Add(basis2); + anisotropy2.Add(basis2); + + anisotropy3.Add(basis3); + anisotropy3.Add(basis3); + anisotropy3.Add(basis3); + anisotropy3.Add(basis3); + + triangles.Add(index + 2); + triangles.Add(index + 1); + triangles.Add(index); + triangles.Add(index + 3); + triangles.Add(index + 2); + triangles.Add(index); + + index += 4; + } + + Apply(meshes[i]); + } + } + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Rendering/ParticleImpostorRendering.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ParticleImpostorRendering.cs.meta new file mode 100644 index 00000000..2ee95bbf --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Rendering/ParticleImpostorRendering.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf17f48345c0f42a9a419ec65398dcd8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Rendering/RenderBatches.meta b/xiaofang/Assets/Obi/Scripts/Common/Rendering/RenderBatches.meta new file mode 100644 index 00000000..66adb0b7 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Rendering/RenderBatches.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7f9c5efc94e964016b39c7778b3af164 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Rendering/RenderBatches/DynamicRenderBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Rendering/RenderBatches/DynamicRenderBatch.cs new file mode 100644 index 00000000..ba2f0949 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Rendering/RenderBatches/DynamicRenderBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Rendering/RenderBatches/DynamicRenderBatch.cs.meta new file mode 100644 index 00000000..4d34bf84 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Rendering/RenderBatches/IRenderBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Rendering/RenderBatches/IRenderBatch.cs new file mode 100644 index 00000000..ef526a53 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Rendering/RenderBatches/IRenderBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Rendering/RenderBatches/IRenderBatch.cs.meta new file mode 100644 index 00000000..ae666aba --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Rendering/RenderBatches/InstanceRenderBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Rendering/RenderBatches/InstanceRenderBatch.cs new file mode 100644 index 00000000..7883fba4 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Rendering/RenderBatches/InstanceRenderBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Rendering/RenderBatches/InstanceRenderBatch.cs.meta new file mode 100644 index 00000000..9c35abb1 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Rendering/RenderBatches/ProceduralRenderBatch.cs b/xiaofang/Assets/Obi/Scripts/Common/Rendering/RenderBatches/ProceduralRenderBatch.cs new file mode 100644 index 00000000..3c8f4d5e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Rendering/RenderBatches/ProceduralRenderBatch.cs @@ -0,0 +1,180 @@ + +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) + indices.Add(triangles[triangleOffset * 3 + i] - vertexOffset); + + 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/xiaofang/Assets/Obi/Scripts/Common/Rendering/RenderBatches/ProceduralRenderBatch.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Rendering/RenderBatches/ProceduralRenderBatch.cs.meta new file mode 100644 index 00000000..326186ae --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Solver.meta b/xiaofang/Assets/Obi/Scripts/Common/Solver.meta new file mode 100644 index 00000000..be27f843 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Solver.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9b70354c2a8424c0d85f24922c2fd48d +folderAsset: yes +timeCreated: 1448942583 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Solver/ObiActorEditorSelectionHandler.cs b/xiaofang/Assets/Obi/Scripts/Common/Solver/ObiActorEditorSelectionHandler.cs new file mode 100644 index 00000000..5f2ecf8d --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Solver/ObiActorEditorSelectionHandler.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Solver/ObiActorEditorSelectionHandler.cs.meta new file mode 100644 index 00000000..45364165 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Solver/ObiRenderSystemStack.cs b/xiaofang/Assets/Obi/Scripts/Common/Solver/ObiRenderSystemStack.cs new file mode 100644 index 00000000..d88159ff --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Solver/ObiRenderSystemStack.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Solver/ObiRenderSystemStack.cs.meta new file mode 100644 index 00000000..69b7e454 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Solver/ObiSolver.cs b/xiaofang/Assets/Obi/Scripts/Common/Solver/ObiSolver.cs new file mode 100644 index 00000000..28df4ab6 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Solver/ObiSolver.cs @@ -0,0 +1,2425 @@ +/** +\mainpage Obi documentation + +Introduction: +------------- + +Obi is a position-based dynamics framework for unity. It enables the simulation of cloth, ropes and fluid in realtime, complete with two-way +rigidbody interaction. + +Features: +------------------- + +- Particles can be pinned both in local space and to rigidbodies (kinematic or not). +- Realistic wind forces. +- Rigidbodies react to particle dynamics, and particles reach to each other and to rigidbodies too. +- Easy prefab instantiation, particle-based actors can be translated, scaled and rotated. +- Custom editor tools. + +*/ + +using UnityEngine; +using Unity.Profiling; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Collections; + +namespace Obi +{ + + /** + * ObiSolver simulates particles and constraints, provided by a list of ObiActor. Particles belonging to different solvers won't interact with each other in any way. + */ + [AddComponentMenu("Physics/Obi/Obi Solver", 800)] + [ExecuteInEditMode] + [DisallowMultipleComponent] + public sealed class ObiSolver : MonoBehaviour + { + static ProfilerMarker m_StateInterpolationPerfMarker = new ProfilerMarker("ApplyStateInterpolation"); + static ProfilerMarker m_UpdateVisibilityPerfMarker = new ProfilerMarker("UpdateVisibility"); + 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 + { + [InspectorName("Compute (GPU)")] + Compute, + [InspectorName("Burst (CPU)")] + Burst + } + + public enum Synchronization + { + Asynchronous, + Synchronous, + SynchronousFixed + } + + [Serializable] + public class ParticleInActor + { + public ObiActor actor; + public int indexInActor; + + public ParticleInActor() + { + actor = null; + indexInActor = -1; + } + + public ParticleInActor(ObiActor actor, int indexInActor) + { + this.actor = actor; + this.indexInActor = indexInActor; + } + } + + 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 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 SpatialQueryCallback OnSpatialQueryResults; + public event SolverCallback OnAdvection; + + public event SolverCallback OnInitialize; + public event SolverCallback OnTeardown; + public event SolverCallback OnUpdateParameters; + public event SolverCallback OnParticleCountChanged; + + public event SolverStepCallback OnSimulationStart; /**< Called at the start of physics simulation, before updating active particles, constraints, etc.*/ + public event SolverCallback OnRequestReadback; + public event SolverStepCallback OnSimulationEnd; /**< Called at the end of physics simulation.*/ + 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; + + private IObiBackend m_SimulationBackend = +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) + new BurstBackend(); +#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 Vector3 gravity = new Vector3(0, -9.81f, 0); + public Space gravitySpace = Space.Self; + + public Vector3 ambientWind = new Vector3(0, 0, 0); + public Space windSpace = Space.Self; + + [Min(1)] + public int foamSubsteps = 1; + + [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("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("How much does world-space linear inertia affect particles in the solver.")] + [Range(0, 1)] + 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] 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(); + + [NonSerialized] public ObiNativeIntList deformableTriangles; + [NonSerialized] public ObiNativeIntList deformableEdges; + [NonSerialized] public ObiNativeVector2List deformableUVs; + + [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 + { + m_dirtyActiveParticles = value; + } + get { return m_dirtyActiveParticles; } + } + + private Bounds m_Bounds = new Bounds(); + private Bounds m_BoundsWS = new Bounds(); + private Plane[] planes = new Plane[6]; + private Camera[] sceneCameras = new Camera[1]; + + // constraints: + [NonSerialized] private IObiConstraints[] m_Constraints = new IObiConstraints[Oni.ConstraintTypeCount]; + + // constraint parameters: + public Oni.ConstraintParameters distanceConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1); + public Oni.ConstraintParameters bendingConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Parallel, 1); + public Oni.ConstraintParameters particleCollisionConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1); + public Oni.ConstraintParameters particleFrictionConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Parallel, 1); + public Oni.ConstraintParameters collisionConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1); + public Oni.ConstraintParameters frictionConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Parallel, 1); + public Oni.ConstraintParameters skinConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1); + public Oni.ConstraintParameters volumeConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Parallel, 1); + 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 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: + ObiNativeVector4List m_RigidbodyLinearVelocities; + ObiNativeVector4List m_RigidbodyAngularVelocities; + + // colors: + [NonSerialized] private ObiNativeColorList m_Colors; + + // cell indices: + [NonSerialized] private ObiNativeInt4List m_CellCoords; + + // status: + [NonSerialized] private ObiNativeIntList m_ActiveParticles; + [NonSerialized] private ObiNativeIntList m_Simplices; + + // positions: + [NonSerialized] private ObiNativeVector4List m_Positions; + [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: + [NonSerialized] private ObiNativeQuaternionList m_Orientations; + [NonSerialized] private ObiNativeQuaternionList m_PrevOrientations; + [NonSerialized] private ObiNativeQuaternionList m_RestOrientations; + + [NonSerialized] private ObiNativeQuaternionList m_StartOrientations; + [NonSerialized] private ObiNativeQuaternionList m_EndOrientations; + [NonSerialized] private ObiNativeQuaternionList m_RenderableOrientations; /**< renderable particle orientations.*/ + + // velocities: + [NonSerialized] private ObiNativeVector4List m_Velocities; + [NonSerialized] private ObiNativeVector4List m_AngularVelocities; + + // masses tensors: + [NonSerialized] private ObiNativeFloatList m_InvMasses; + [NonSerialized] private ObiNativeFloatList m_InvRotationalMasses; + + // external forces: + [NonSerialized] private ObiNativeVector4List m_ExternalForces; + [NonSerialized] private ObiNativeVector4List m_ExternalTorques; + [NonSerialized] private ObiNativeVector4List m_Wind; + + // deltas: + [NonSerialized] private ObiNativeVector4List m_PositionDeltas; + [NonSerialized] private ObiNativeQuaternionList m_OrientationDeltas; + [NonSerialized] private ObiNativeIntList m_PositionConstraintCounts; + [NonSerialized] private ObiNativeIntList m_OrientationConstraintCounts; + + // particle collisions: + [NonSerialized] private ObiNativeIntList m_CollisionMaterials; + [NonSerialized] private ObiNativeIntList m_Phases; + [NonSerialized] private ObiNativeIntList m_Filters; + + // particle shape: + [NonSerialized] private ObiNativeVector4List m_PrincipalRadii; + [NonSerialized] private ObiNativeVector4List m_RenderableRadii; + [NonSerialized] private ObiNativeVector4List m_Normals; + + // fluids: + [NonSerialized] private ObiNativeFloatList m_Life; + [NonSerialized] private ObiNativeVector4List m_FluidData; + [NonSerialized] private ObiNativeVector4List m_FluidMaterials; /**< fluidRadius / surfTension / viscosity / vorticity */ + [NonSerialized] private ObiNativeVector4List m_FluidInterface; /**< drag / pressure / buoyancy / miscibility */ + [NonSerialized] private ObiNativeVector4List m_UserData; + [NonSerialized] private ObiNativeMatrix4x4List m_Anisotropy; + + // 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 implementation != null; } + } + + public IObiBackend simulationBackend + { + get { return m_SimulationBackend; } + } + + public BackendType backendType + { + set + { + if (m_Backend != value) + { + m_Backend = value; + UpdateBackend(); + } + } + get { return m_Backend; } + } + + public SimplexCounts simplexCounts + { + get { return m_SimplexCounts; } + } + + /// + /// Solver bounds expressed in world space. + /// + public UnityEngine.Bounds bounds + { + get { return m_BoundsWS; } + } + + /// + /// Solver bounds expressed in the solver's local space. + /// + public UnityEngine.Bounds localBounds + { + get { return m_Bounds; } + } + + 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 (backendType == BackendType.Burst || OnCollision != null) ? colliderContacts.count : 0; } + } + + public int particleContactCount + { + get { return (backendType == BackendType.Burst || OnParticleCollision != null) ? particleContacts.count : 0; } + } + + public ParticleInActor[] particleToActor + { + get + { + if (m_ParticleToActor == null) + m_ParticleToActor = new ParticleInActor[0]; + + return m_ParticleToActor; + } + } + + public ObiNativeIntList activeParticles + { + get + { + if (m_ActiveParticles == null) + m_ActiveParticles = new ObiNativeIntList(); + + return m_ActiveParticles; + } + } + + #region Simplices + public ObiNativeIntList simplices + { + get + { + if (m_Simplices == null) + m_Simplices = new ObiNativeIntList(); + + return m_Simplices; + } + } + + 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 + { + if (m_RigidbodyLinearVelocities == null) + { + m_RigidbodyLinearVelocities = new ObiNativeVector4List(); + } + return m_RigidbodyLinearVelocities; + } + } + + public ObiNativeVector4List rigidbodyAngularDeltas + { + get + { + if (m_RigidbodyAngularVelocities == null) + { + m_RigidbodyAngularVelocities = new ObiNativeVector4List(); + } + return m_RigidbodyAngularVelocities; + } + } + #endregion + + public ObiNativeColorList colors + { + get + { + if (m_Colors == null) + { + m_Colors = new ObiNativeColorList(); + } + return m_Colors; + } + } + + public ObiNativeInt4List cellCoords + { + get + { + if (m_CellCoords == null) + { + m_CellCoords = new ObiNativeInt4List(8, 16, new VInt4(int.MaxValue)); + } + return m_CellCoords; + } + } + + #region Position arrays + + public ObiNativeVector4List positions + { + get + { + if (m_Positions == null) + m_Positions = new ObiNativeVector4List(); + return m_Positions; + } + } + + + public ObiNativeVector4List prevPositions + { + get + { + if (m_PrevPositions == null) + m_PrevPositions = new ObiNativeVector4List(); + return m_PrevPositions; + } + } + + public ObiNativeVector4List restPositions + { + get + { + if (m_RestPositions == null) + m_RestPositions = new ObiNativeVector4List(); + return m_RestPositions; + } + } + + public ObiNativeVector4List startPositions + { + get + { + if (m_StartPositions == null) + m_StartPositions = new ObiNativeVector4List(); + return m_StartPositions; + } + } + + public ObiNativeVector4List endPositions + { + get + { + if (m_EndPositions == null) + m_EndPositions = new ObiNativeVector4List(); + return m_EndPositions; + } + } + + public ObiNativeVector4List renderablePositions + { + get + { + if (m_RenderablePositions == null) + m_RenderablePositions = new ObiNativeVector4List(); + return m_RenderablePositions; + } + } + + #endregion + + #region Orientation arrays + + public ObiNativeQuaternionList orientations + { + get + { + if (m_Orientations == null) + m_Orientations = new ObiNativeQuaternionList(); + return m_Orientations; + } + } + + public ObiNativeQuaternionList prevOrientations + { + get + { + if (m_PrevOrientations == null) + m_PrevOrientations = new ObiNativeQuaternionList(); + return m_PrevOrientations; + } + } + + public ObiNativeQuaternionList restOrientations + { + get + { + if (m_RestOrientations == null) + m_RestOrientations = new ObiNativeQuaternionList(); + return m_RestOrientations; + } + } + + + public ObiNativeQuaternionList startOrientations + { + get + { + if (m_StartOrientations == null) + m_StartOrientations = new ObiNativeQuaternionList(); + return m_StartOrientations; + } + } + + public ObiNativeQuaternionList endOrientations + { + get + { + if (m_EndOrientations == null) + m_EndOrientations = new ObiNativeQuaternionList(); + return m_EndOrientations; + } + } + + + public ObiNativeQuaternionList renderableOrientations + { + get + { + if (m_RenderableOrientations == null) + m_RenderableOrientations = new ObiNativeQuaternionList(); + return m_RenderableOrientations; + } + } + + #endregion + + #region Velocity arrays + + public ObiNativeVector4List velocities + { + get + { + if (m_Velocities == null) + m_Velocities = new ObiNativeVector4List(); + return m_Velocities; + } + } + + public ObiNativeVector4List angularVelocities + { + get + { + if (m_AngularVelocities == null) + m_AngularVelocities = new ObiNativeVector4List(); + return m_AngularVelocities; + } + } + + #endregion + + #region Mass arrays + + public ObiNativeFloatList invMasses + { + get + { + if (m_InvMasses == null) + m_InvMasses = new ObiNativeFloatList(); + return m_InvMasses; + } + } + + public ObiNativeFloatList invRotationalMasses + { + get + { + if (m_InvRotationalMasses == null) + m_InvRotationalMasses = new ObiNativeFloatList(); + return m_InvRotationalMasses; + } + } + + #endregion + + #region External forces + + public ObiNativeVector4List externalForces + { + get + { + if (m_ExternalForces == null) + m_ExternalForces = new ObiNativeVector4List(); + return m_ExternalForces; + } + } + + public ObiNativeVector4List externalTorques + { + get + { + if (m_ExternalTorques == null) + m_ExternalTorques = new ObiNativeVector4List(); + return m_ExternalTorques; + } + } + + public ObiNativeVector4List wind + { + get + { + if (m_Wind == null) + m_Wind = new ObiNativeVector4List(); + return m_Wind; + } + } + + #endregion + + #region Deltas + + public ObiNativeVector4List positionDeltas + { + get + { + if (m_PositionDeltas == null) + m_PositionDeltas = new ObiNativeVector4List(); + return m_PositionDeltas; + } + } + + public ObiNativeQuaternionList orientationDeltas + { + get + { + if (m_OrientationDeltas == null) + m_OrientationDeltas = new ObiNativeQuaternionList(8, 16, new Quaternion(0, 0, 0, 0)); + return m_OrientationDeltas; + } + } + + public ObiNativeIntList positionConstraintCounts + { + get + { + if (m_PositionConstraintCounts == null) + m_PositionConstraintCounts = new ObiNativeIntList(); + return m_PositionConstraintCounts; + } + } + + public ObiNativeIntList orientationConstraintCounts + { + get + { + if (m_OrientationConstraintCounts == null) + m_OrientationConstraintCounts = new ObiNativeIntList(); + return m_OrientationConstraintCounts; + } + } + + #endregion + + #region Shape and phase + + public ObiNativeIntList collisionMaterials + { + get + { + if (m_CollisionMaterials == null) + m_CollisionMaterials = new ObiNativeIntList(); + return m_CollisionMaterials; + } + } + + public ObiNativeIntList phases + { + get + { + if (m_Phases == null) + m_Phases = new ObiNativeIntList(); + return m_Phases; + } + } + + public ObiNativeIntList filters + { + get + { + if (m_Filters == null) + m_Filters = new ObiNativeIntList(); + return m_Filters; + } + } + + public ObiNativeVector4List renderableRadii + { + get + { + if (m_RenderableRadii == null) + m_RenderableRadii = new ObiNativeVector4List(); + return m_RenderableRadii; + } + } + + public ObiNativeVector4List principalRadii + { + get + { + if (m_PrincipalRadii == null) + m_PrincipalRadii = new ObiNativeVector4List(); + return m_PrincipalRadii; + } + } + + public ObiNativeVector4List normals + { + get + { + if (m_Normals == null) + m_Normals = new ObiNativeVector4List(); + return m_Normals; + } + } + + #endregion + + #region Fluid properties + + public ObiNativeFloatList life + { + get + { + if (m_Life == null) + m_Life = new ObiNativeFloatList(); + return m_Life; + } + } + + public ObiNativeVector4List fluidData + { + get + { + if (m_FluidData == null) + m_FluidData = new ObiNativeVector4List(); + return m_FluidData; + } + } + + public ObiNativeVector4List userData + { + get + { + if (m_UserData == null) + m_UserData = new ObiNativeVector4List(); + return m_UserData; + } + } + + public ObiNativeVector4List fluidInterface + { + get + { + if (m_FluidInterface == null) + m_FluidInterface = new ObiNativeVector4List(); + return m_FluidInterface; + } + } + + public ObiNativeVector4List fluidMaterials + { + get + { + if (m_FluidMaterials == null) + m_FluidMaterials = new ObiNativeVector4List(); + return m_FluidMaterials; + } + } + + public ObiNativeMatrix4x4List anisotropies + { + get + { + if (m_Anisotropy == null) + m_Anisotropy = new ObiNativeMatrix4x4List(); + return m_Anisotropy; + } + } + + public ObiNativeVector4List foamPositions + { + get + { + if (m_FoamPositions == null) + m_FoamPositions = new ObiNativeVector4List(); + return m_FoamPositions; + } + } + + public ObiNativeVector4List foamVelocities + { + get + { + if (m_FoamVelocities == null) + m_FoamVelocities = new ObiNativeVector4List(); + return m_FoamVelocities; + } + } + + public ObiNativeVector4List foamColors + { + get + { + if (m_FoamColors == null) + m_FoamColors = new ObiNativeVector4List(); + return m_FoamColors; + } + } + + public ObiNativeVector4List foamAttributes + { + get + { + if (m_FoamAttributes == null) + m_FoamAttributes = new ObiNativeVector4List(); + return m_FoamAttributes; + } + } + + public ObiNativeIntList foamCount + { + get + { + 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 + + 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) + { + // Signal the start of a frame, so we know the world needs to be updated this frame. + ObiColliderWorld.GetInstance().FrameStart(); + + // 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, making sure it will also update after FixedUpdate() for solvers not using fixed sync. + ObiColliderWorld.GetInstance().UpdateWorld(Time.fixedDeltaTime); + ObiColliderWorld.GetInstance().FrameStart(); + + // kick off this step's simulation, and immediately wait for it to complete: + StartSimulation(Time.fixedDeltaTime, 1); + CompleteSimulation(); + } + + } + + private void Update() + { + // 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. + if (steps > 0 && bufferedSynchronization != Synchronization.SynchronousFixed) + { + ObiColliderWorld.GetInstance().UpdateWorld(Time.fixedDeltaTime * steps); + } + } + + private void LateUpdate() + { + var scale = transform.lossyScale; + 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) + accumulatedTime += Time.deltaTime - Time.fixedDeltaTime * steps; + 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 OnDestroy() + { + // Remove all actors from the solver. This will trigger Teardown() when the last actor is removed. + while (actors.Count > 0) + RemoveActor(actors[actors.Count - 1]); + } + + private void CreateBackend() + { + switch (m_Backend) + { + +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) + case BackendType.Burst: m_SimulationBackend = new BurstBackend(); break; +#endif + case BackendType.Compute: + + if (SystemInfo.supportsComputeShaders) + m_SimulationBackend = new ComputeBackend(); + else + goto default; + break; + + default: + 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; + } + } + + public void Initialize() + { + if (!initialized) + { + 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(); + m_Constraints[(int)Oni.ConstraintType.Aerodynamics] = new ObiAerodynamicConstraintsData(); + m_Constraints[(int)Oni.ConstraintType.StretchShear] = new ObiStretchShearConstraintsData(); + m_Constraints[(int)Oni.ConstraintType.BendTwist] = new ObiBendTwistConstraintsData(); + m_Constraints[(int)Oni.ConstraintType.Chain] = new ObiChainConstraintsData(); + m_Constraints[(int)Oni.ConstraintType.ShapeMatching] = new ObiShapeMatchingConstraintsData(); + m_Constraints[(int)Oni.ConstraintType.Volume] = new ObiVolumeConstraintsData(); + m_Constraints[(int)Oni.ConstraintType.Tether] = new ObiTetherConstraintsData(); + m_Constraints[(int)Oni.ConstraintType.Skin] = new ObiSkinConstraintsData(); + m_Constraints[(int)Oni.ConstraintType.Pin] = new ObiPinConstraintsData(); + + // Create the solver: + implementation = m_SimulationBackend.CreateSolver(this, 0); + + // Set data arrays: + implementation.ParticleCountChanged(this); + implementation.SetRigidbodyArrays(this); + OnParticleCountChanged?.Invoke(this); + + // Initialize moving transform: + InitializeTransformFrame(); + + // Initial collider world update: + ObiColliderWorld.GetInstance().FrameStart(); + ObiColliderWorld.GetInstance().UpdateWorld(0); + + OnInitialize?.Invoke(this); + + // Set initial parameter values: + PushSolverParameters(); + +#if UNITY_EDITOR + ObiActorEditorSelectionHandler.SolverInitialized(this); +#endif + } + } + + public void Teardown() + { + if (initialized) + { + CompleteSimulation(); + + // Clear all constraints: + PushConstraints(); + + // 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 + } + } + + public void UpdateBackend() + { + // remove all actors, this will trigger a teardown: + List temp = new List(actors); + foreach (ObiActor actor in temp) + actor.RemoveFromSolver(); + + // re-add all actors. + // Solver will be re-initialized on adding the first one. + foreach (ObiActor actor in temp) + actor.AddToSolver(); + } + + private void FreeRigidbodyArrays() + { + rigidbodyLinearDeltas.Dispose(); + rigidbodyAngularDeltas.Dispose(); + + m_RigidbodyLinearVelocities = null; + m_RigidbodyAngularVelocities = null; + } + + public void EnsureRigidbodyArraysCapacity(int count) + { + if (initialized && (count > rigidbodyLinearDeltas.count || !rigidbodyLinearDeltas.isCreated)) + { + rigidbodyLinearDeltas.ResizeInitialized(count); + rigidbodyAngularDeltas.ResizeInitialized(count); + + implementation.SetRigidbodyArrays(this); + } + } + + private void FreeParticleArrays() + { + activeParticles.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(); + velocities.Dispose(); + orientations.Dispose(); + prevOrientations.Dispose(); + restOrientations.Dispose(); + angularVelocities.Dispose(); + invMasses.Dispose(); + invRotationalMasses.Dispose(); + principalRadii.Dispose(); + collisionMaterials.Dispose(); + phases.Dispose(); + filters.Dispose(); + renderablePositions.Dispose(); + renderableOrientations.Dispose(); + renderableRadii.Dispose(); + fluidInterface.Dispose(); + fluidMaterials.Dispose(); + foamPositions.Dispose(); + foamVelocities.Dispose(); + foamColors.Dispose(); + foamAttributes.Dispose(); + foamCount.Dispose(); + anisotropies.Dispose(); + life.Dispose(); + fluidData.Dispose(); + userData.Dispose(); + externalForces.Dispose(); + externalTorques.Dispose(); + wind.Dispose(); + positionDeltas.Dispose(); + orientationDeltas.Dispose(); + positionConstraintCounts.Dispose(); + orientationConstraintCounts.Dispose(); + normals.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_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_ExternalForces = null; + m_ExternalTorques = null; + m_Wind = null; + m_PositionDeltas = null; + m_OrientationDeltas = null; + m_PositionConstraintCounts = null; + m_OrientationConstraintCounts = null; + m_CollisionMaterials = null; + m_Phases = null; + m_Filters = null; + m_RenderableRadii = null; + m_PrincipalRadii = null; + m_Normals = null; + m_Life = null; + m_FluidData = null; + m_UserData = null; + m_FluidInterface = null; + m_FluidMaterials = 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) + { + // only resize if the count is larger than the current amount of particles: + if (count >= positions.count) + { + colors.ResizeInitialized(count, Color.white); + 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); + renderablePositions.ResizeInitialized(count); + renderableOrientations.ResizeInitialized(count, Quaternion.identity); + velocities.ResizeInitialized(count); + angularVelocities.ResizeInitialized(count); + invMasses.ResizeInitialized(count); + invRotationalMasses.ResizeInitialized(count); + principalRadii.ResizeInitialized(count); + collisionMaterials.ResizeInitialized(count); + phases.ResizeInitialized(count); + filters.ResizeInitialized(count); + renderableRadii.ResizeInitialized(count); + fluidInterface.ResizeInitialized(count); + fluidMaterials.ResizeInitialized(count); + anisotropies.ResizeInitialized(count); + life.ResizeInitialized(count); + fluidData.ResizeInitialized(count); + userData.ResizeInitialized(count); + externalForces.ResizeInitialized(count); + externalTorques.ResizeInitialized(count); + wind.ResizeInitialized(count); + positionDeltas.ResizeInitialized(count); + orientationDeltas.ResizeInitialized(count, new Quaternion(0, 0, 0, 0)); + positionConstraintCounts.ResizeInitialized(count); + orientationConstraintCounts.ResizeInitialized(count); + normals.ResizeInitialized(count); + } + + if (count >= m_ParticleToActor.Length) + { + Array.Resize(ref m_ParticleToActor, count * 2); + } + } + + 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.count > 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.count); + } + + // determine first particle in the free list to use: + int first = freeList.count - particleIndices.count; + + // copy free indices to the input array: + particleIndices.CopyFrom(freeList, first, 0, particleIndices.count); + + // shorten the free list: + freeList.ResizeUninitialized(first); + + } + + 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(); + } + } + + 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; + + // 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(); + + // Update inertial reference frame: + simulationHandle = UpdateTransformFrame(simulatedTime); + + // Calculate bounds: + 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(); + + // 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. + /// + /// Attemps to add the actor to this solver returning whether this was successful or not. In case the actor was already added, or had no reference to a blueprint, this operation will return false. + /// If this was the first actor added to the solver, will attempt to initialize the solver. + /// While in play mode, if the actor is sucessfully added to the solver, will also call actor.LoadBlueprint(). + /// An actor. + /// + /// Whether the actor was sucessfully added. + /// + public bool AddActor(ObiActor actor) + { + if (actor == null || actors == null || actor.sourceBlueprint == null || actor.sourceBlueprint.empty || actors.Contains(actor) || addBuffer.Contains(actor)) + return false; + + // 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; + } + + /// + /// Attempts to remove an actor from this solver, and returns whether this was sucessful or not. + /// + /// Will only reurn true if the actor had been previously added successfully to this solver. + /// If the actor is sucessfully removed from the solver, will also call actor.UnloadBlueprint(). Once the last actor is removed from the solver, + /// this method will attempt to tear down the solver. + /// An actor. + /// + /// Whether the actor was sucessfully removed. + /// + 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); + + 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(); + + return true; + } + + 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(this); + + implementation.ParticleCountChanged(this); + OnParticleCountChanged?.Invoke(this); + } + + /// + /// Updates solver parameters. + /// + /// Call this after modifying solver or constraint parameters. + public void PushSolverParameters() + { + if (!initialized) + return; + + implementation.SetParameters(parameters); + + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Distance, ref distanceConstraintParameters); + + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Bending, ref bendingConstraintParameters); + + implementation.SetConstraintGroupParameters(Oni.ConstraintType.ParticleCollision, ref particleCollisionConstraintParameters); + + implementation.SetConstraintGroupParameters(Oni.ConstraintType.ParticleFriction, ref particleFrictionConstraintParameters); + + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Collision, ref collisionConstraintParameters); + + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Friction, ref frictionConstraintParameters); + + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Density, ref densityConstraintParameters); + + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Skin, ref skinConstraintParameters); + + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Volume, ref volumeConstraintParameters); + + implementation.SetConstraintGroupParameters(Oni.ConstraintType.ShapeMatching, ref shapeMatchingConstraintParameters); + + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Tether, ref tetherConstraintParameters); + + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Pin, ref pinConstraintParameters); + + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Stitch, ref stitchConstraintParameters); + + implementation.SetConstraintGroupParameters(Oni.ConstraintType.StretchShear, ref stretchShearConstraintParameters); + + implementation.SetConstraintGroupParameters(Oni.ConstraintType.BendTwist, ref bendTwistConstraintParameters); + + implementation.SetConstraintGroupParameters(Oni.ConstraintType.Chain, ref chainConstraintParameters); + + if (OnUpdateParameters != null) + OnUpdateParameters(this); + + } + + /// + /// Returns the parameters used by a given constraint type. + /// + /// If you know the type of the constraints at runtime, + /// this is the same as directly accessing the appropiate public Oni.ConstraintParameters struct in the solver. + /// Type of the constraints whose parameters will be returned by this method. + /// + /// Parameters for the constraints of the specified type. + /// + public Oni.ConstraintParameters GetConstraintParameters(Oni.ConstraintType constraintType) + { + switch (constraintType) + { + case Oni.ConstraintType.Distance: return distanceConstraintParameters; + case Oni.ConstraintType.Bending: return bendingConstraintParameters; + case Oni.ConstraintType.ParticleCollision: return particleCollisionConstraintParameters; + case Oni.ConstraintType.ParticleFriction: return particleFrictionConstraintParameters; + case Oni.ConstraintType.Collision: return collisionConstraintParameters; + case Oni.ConstraintType.Friction: return frictionConstraintParameters; + case Oni.ConstraintType.Skin: return skinConstraintParameters; + case Oni.ConstraintType.Volume: return volumeConstraintParameters; + case Oni.ConstraintType.ShapeMatching: return shapeMatchingConstraintParameters; + case Oni.ConstraintType.Tether: return tetherConstraintParameters; + case Oni.ConstraintType.Pin: return pinConstraintParameters; + case Oni.ConstraintType.Stitch: return stitchConstraintParameters; + case Oni.ConstraintType.Density: return densityConstraintParameters; + case Oni.ConstraintType.StretchShear: return stretchShearConstraintParameters; + case Oni.ConstraintType.BendTwist: return bendTwistConstraintParameters; + case Oni.ConstraintType.Chain: return chainConstraintParameters; + + default: return new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1); + } + } + + /// + /// Returns the runtime representation of constraints of a given type being simulated by this solver. + /// + /// Type of the constraints that will be returned by this method. + /// + /// The runtime constraints of the type speficied. + /// + public IObiConstraints GetConstraintsByType(Oni.ConstraintType type) + { + int index = (int)type; + if (m_Constraints != null && index >= 0 && index < m_Constraints.Length) + return m_Constraints[index]; + return null; + } + + private void PushActiveParticles() + { + if (dirtyActiveParticles) + { + using (m_PushActiveParticles.Auto()) + { + 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; + } + } + } + + 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() + { + + if (dirtySimplices != Oni.SimplexType.None) + { + using (m_PushSimplices.Auto()) + { + 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) + { + var currentActor = actors[i]; + + if (currentActor.isActiveAndEnabled && currentActor.isLoaded) + { + //simplex based contacts + if (currentActor.surfaceCollisions) + { + 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 (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]); + } + } + } + // particle based contacts + else if ((dirtySimplices & Oni.SimplexType.Point) != 0) + { + // generate a point simplex out of each active particle: + points.AddRange(currentActor.solverIndices, currentActor.activeParticleCount); + } + } + } + + 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; + } + } + } + + private void PushConstraints() + { + if (dirtyConstraints != 0) + { + // 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 (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; + } + } + + /** + * 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; + implementation.GetBounds(ref min, ref max); + m_Bounds.SetMinMax(min, max); + } + + if (m_Bounds.AreValid()) + { + using (m_TestBoundsPerfMarker.Auto()) + { + // transform bounds to world space: + m_BoundsWS = m_Bounds.Transform(transform.localToWorldMatrix); + + using (m_GetAllCamerasPerfMarker.Auto()) + { + Array.Resize(ref sceneCameras, Camera.allCamerasCount); + Camera.GetAllCameras(sceneCameras); + } + + foreach (Camera cam in sceneCameras) + { + GeometryUtility.CalculateFrustumPlanes(cam, planes); + if (GeometryUtility.TestPlanesAABB(planes, m_BoundsWS)) + { + if (!isVisible) + { + isVisible = true; + foreach (ObiActor actor in actors) + actor.OnSolverVisibilityChanged(isVisible); + } + return; + } + } + } + } + + if (isVisible) + { + isVisible = false; + foreach (ObiActor actor in actors) + actor.OnSolverVisibilityChanged(isVisible); + } + } + } + + private void InitializeTransformFrame() + { + Vector4 translation = transform.position; + Vector4 scale = transform.lossyScale; + Quaternion rotation = transform.rotation; + + implementation.InitializeFrame(translation, scale, rotation); + } + + private IObiJobHandle UpdateTransformFrame(float dt) + { + Vector4 translation = transform.position; + Vector4 scale = transform.lossyScale; + Quaternion rotation = transform.rotation; + + implementation.UpdateFrame(translation, scale, rotation, dt); + return implementation.ApplyFrame(worldLinearInertiaScale, worldAngularInertiaScale, dt); + } + + public void RegisterRenderSystem(IRenderSystem renderSystem) + { + m_RenderSystems.RegisterRenderSystem(renderSystem); + } + + 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); + } + + /// + /// 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 to apply to the query shape. + /// + /// 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 int EnqueueSpatialQuery(QueryShape shape, AffineTransform transform) + { + // if the solver is not initialized, bail out. + if (!initialized) + return -1; + + int index = bufferedQueryShapes.count; + bufferedQueryShapes.Add(shape); + bufferedQueryTransforms.Add(transform); + return index; + } + + /// + /// 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. + /// 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. + /// + /// 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 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 -1; + + int index = bufferedQueryShapes.count; + + bufferedQueryShapes.Add(new QueryShape + { + type = QueryShape.QueryType.Ray, + center = ray.origin, + size = ray.direction * maxDistance, + contactOffset = rayThickness, + maxDistance = 0.0001f, + filter = filter + }); + + bufferedQueryTransforms.Add(new AffineTransform(Vector4.zero, Quaternion.identity, Vector4.one)); + + return index; + } + + } + +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Solver/ObiSolver.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Solver/ObiSolver.cs.meta new file mode 100644 index 00000000..3ba5ee78 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Solver/ObiSolver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d174fab52f0c4b8399f25d5c3ea524c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 4bb17fa3a0a95413a817e60391d26010, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils.meta new file mode 100644 index 00000000..7aa03e40 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8114c2ae03b5c4118a326bc9805a3362 +folderAsset: yes +timeCreated: 1454882590 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes.meta new file mode 100644 index 00000000..6222b7a0 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b8154151b8aa747e3870dae448f70d4b +folderAsset: yes +timeCreated: 1511453393 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/ChildrenOnly.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/ChildrenOnly.cs new file mode 100644 index 00000000..e8cecb04 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/ChildrenOnly.cs @@ -0,0 +1,45 @@ +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace Obi{ + + + [System.AttributeUsage(System.AttributeTargets.Field)] + public class ChildrenOnly : MultiPropertyAttribute + { + #if UNITY_EDITOR + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + + float height = 0; + SerializedProperty it = property; + int depth = it.depth; + it.NextVisible(true); + do + { + EditorGUI.PropertyField(new Rect(position.x,position.y+height,position.width,EditorGUIUtility.singleLineHeight),it,true); + height += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + }while (it.NextVisible(false) && it.depth != depth); + + } + + internal override float? GetPropertyHeight(SerializedProperty property, GUIContent label) + { + + float height = -EditorGUIUtility.standardVerticalSpacing; + SerializedProperty it = property; + int depth = it.depth; + it.NextVisible(true); + do + { + height += EditorGUI.GetPropertyHeight(it, label) + EditorGUIUtility.standardVerticalSpacing; + }while (it.NextVisible(false) && it.depth != depth); + return height; + + } + #endif + } + +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/ChildrenOnly.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/ChildrenOnly.cs.meta new file mode 100644 index 00000000..4217d036 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/ChildrenOnly.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 37995b0258e3041208a4b13bd6feb31c +timeCreated: 1511965883 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/DisplayAs.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/DisplayAs.cs new file mode 100644 index 00000000..113dfa1f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/DisplayAs.cs @@ -0,0 +1,26 @@ +using System; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace Obi{ + + #if UNITY_EDITOR + [System.AttributeUsage(System.AttributeTargets.Field)] + public class DisplayAs : MultiPropertyAttribute + { + string name; + public DisplayAs(string name) + { + this.name = name; + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + EditorGUI.PropertyField(position,property,new GUIContent(name),true); + } + } + #endif +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/DisplayAs.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/DisplayAs.cs.meta new file mode 100644 index 00000000..4d1363d5 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/DisplayAs.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: dd2e6690a4e514f0b93596b416ea6e1a +timeCreated: 1515069828 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/Indent.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/Indent.cs new file mode 100644 index 00000000..6454939d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/Indent.cs @@ -0,0 +1,25 @@ +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace Obi{ + + + [System.AttributeUsage(System.AttributeTargets.Field)] + public class Indent : MultiPropertyAttribute + { + #if UNITY_EDITOR + internal override void OnPreGUI(Rect position, SerializedProperty property) + { + EditorGUI.indentLevel++; + } + internal override void OnPostGUI(Rect position, SerializedProperty property) + { + EditorGUI.indentLevel--; + } + #endif + } + +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/Indent.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/Indent.cs.meta new file mode 100644 index 00000000..ccaf4a24 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/Indent.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a02d36b0684b3461fad08bed56e9798c +timeCreated: 1511529530 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/InspectorButtonAttribute.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/InspectorButtonAttribute.cs new file mode 100644 index 00000000..9378ce37 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/InspectorButtonAttribute.cs @@ -0,0 +1,56 @@ +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif +using System.Reflection; + +namespace Obi{ + +[System.AttributeUsage(System.AttributeTargets.Field)] +public class InspectorButtonAttribute : PropertyAttribute +{ + public static float kDefaultButtonWidth = 80; + + public readonly string MethodName; + + private float _buttonWidth = kDefaultButtonWidth; + public float ButtonWidth + { + get { return _buttonWidth; } + set { _buttonWidth = value; } + } + + public InspectorButtonAttribute(string MethodName) + { + this.MethodName = MethodName; + } +} + +#if UNITY_EDITOR +[CustomPropertyDrawer(typeof(InspectorButtonAttribute))] +public class InspectorButtonPropertyDrawer : PropertyDrawer +{ + private MethodInfo _eventMethodInfo = null; + + public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) + { + InspectorButtonAttribute inspectorButtonAttribute = (InspectorButtonAttribute)attribute; + Rect buttonRect = new Rect(position.x + (position.width - inspectorButtonAttribute.ButtonWidth) * 0.5f, position.y, inspectorButtonAttribute.ButtonWidth, position.height); + if (GUI.Button(buttonRect, label.text)) + { + System.Type eventOwnerType = prop.serializedObject.targetObject.GetType(); + string eventName = inspectorButtonAttribute.MethodName; + + if (_eventMethodInfo == null) + _eventMethodInfo = eventOwnerType.GetMethod(eventName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); + + if (_eventMethodInfo != null) + _eventMethodInfo.Invoke(prop.serializedObject.targetObject, null); + else + Debug.LogWarning(string.Format("InspectorButton: Unable to find method {0} in {1}", eventName, eventOwnerType)); + } + } +} +#endif + +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/InspectorButtonAttribute.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/InspectorButtonAttribute.cs.meta new file mode 100644 index 00000000..cc768a2e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/InspectorButtonAttribute.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: bada34fec41c44b4b90af1fe27ca7a95 +timeCreated: 1440029519 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/LayerField.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/LayerField.cs new file mode 100644 index 00000000..458d1b88 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/LayerField.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/LayerField.cs.meta new file mode 100644 index 00000000..e7694c6c --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MinMaxAttribute.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MinMaxAttribute.cs new file mode 100644 index 00000000..1de1f01b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MinMaxAttribute.cs @@ -0,0 +1,41 @@ +using System; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace Obi{ + + [System.AttributeUsage(System.AttributeTargets.Field)] + public class MinMaxAttribute : MultiPropertyAttribute + { + float min; + float max; + public MinMaxAttribute(float min, float max) + { + this.min = min; + this.max = max; + } + #if UNITY_EDITOR + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + if (property.propertyType == SerializedPropertyType.Vector2){ + float minValue = property.vector2Value.x; + float maxValue = property.vector2Value.y; + + EditorGUI.MinMaxSlider(position, label, ref minValue, ref maxValue, min, max); + + var vec = Vector2.zero; + vec.x = minValue; + vec.y = maxValue; + + property.vector2Value = vec; + }else{ + EditorGUI.LabelField(position, label.text, "Use MinMaxAttribute with Vector2."); + } + } + #endif + } + +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MinMaxAttribute.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MinMaxAttribute.cs.meta new file mode 100644 index 00000000..9fce9330 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MinMaxAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ac8601bd46d146168b508598e8a4f8c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MultiDelayed.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MultiDelayed.cs new file mode 100644 index 00000000..8942696d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MultiDelayed.cs @@ -0,0 +1,29 @@ +using System; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace Obi{ + + [System.AttributeUsage(System.AttributeTargets.Field)] + public class MultiDelayed : MultiPropertyAttribute + { + #if UNITY_EDITOR + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + // Now draw the property as a Slider or an IntSlider based on whether it's a float or integer. + if (property.propertyType == SerializedPropertyType.Float) + EditorGUI.DelayedFloatField(position, property, label); + else if (property.propertyType == SerializedPropertyType.Integer) + EditorGUI.DelayedIntField(position, property, label); + else if (property.propertyType == SerializedPropertyType.String) + EditorGUI.DelayedTextField(position, property, label); + else + EditorGUI.LabelField(position, label.text, "Use MultiRange with float or int."); + } + #endif + } + +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MultiDelayed.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MultiDelayed.cs.meta new file mode 100644 index 00000000..7c128181 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MultiDelayed.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 17d0e7e43f7f844aba84497d6385c920 +timeCreated: 1511969575 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MultiPropertyAttribute.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MultiPropertyAttribute.cs new file mode 100644 index 00000000..8dc8923d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MultiPropertyAttribute.cs @@ -0,0 +1,97 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace Obi{ + + [System.AttributeUsage(System.AttributeTargets.Field)] + public abstract class MultiPropertyAttribute : PropertyAttribute + { + #if UNITY_EDITOR + public IOrderedEnumerable stored = null; + + public virtual void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + EditorGUI.PropertyField(position,property,label,true); + } + + internal virtual void OnPreGUI(Rect position, SerializedProperty property){} + internal virtual void OnPostGUI(Rect position, SerializedProperty property){} + + internal virtual bool IsVisible(SerializedProperty property){return true;} + internal virtual float? GetPropertyHeight( SerializedProperty property, GUIContent label){return null;} + #endif + } + + #if UNITY_EDITOR + [CustomPropertyDrawer(typeof(MultiPropertyAttribute),true)] + public class MultiPropertyDrawer : PropertyDrawer + { + private MultiPropertyAttribute RetrieveAttributes() + { + MultiPropertyAttribute mAttribute = attribute as MultiPropertyAttribute; + + // Get the attribute list, sorted by "order". + if (mAttribute.stored == null) + { + mAttribute.stored = fieldInfo.GetCustomAttributes(typeof(MultiPropertyAttribute), false).OrderBy(s => ((PropertyAttribute)s).order); + } + + return mAttribute; + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + MultiPropertyAttribute mAttribute = RetrieveAttributes(); + + // If the attribute is invisible, regain the standard vertical spacing. + foreach (MultiPropertyAttribute attr in mAttribute.stored) + if (!attr.IsVisible(property)) + return -EditorGUIUtility.standardVerticalSpacing; + + // 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) + { + if (atr as MultiPropertyAttribute != null) + { + var tempheight = ((MultiPropertyAttribute)atr).GetPropertyHeight(property, label); + if (tempheight.HasValue) + { + height = tempheight.Value; + break; + } + } + } + return height; + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + MultiPropertyAttribute mAttribute = RetrieveAttributes(); + + // Calls to IsVisible. If it returns false for any attribute, the property will not be rendered. + foreach (MultiPropertyAttribute attr in mAttribute.stored) + if (!attr.IsVisible(property)) return; + + // Calls to OnPreRender before the last attribute draws the UI. + foreach (MultiPropertyAttribute attr in mAttribute.stored) + attr.OnPreGUI(position,property); + + // The last attribute is in charge of actually drawing something: + ((MultiPropertyAttribute)mAttribute.stored.Last()).OnGUI(position,property,label); + + // Calls to OnPostRender after the last attribute draws the UI. These are called in inverse order. + foreach (MultiPropertyAttribute attr in mAttribute.stored.Reverse()) + attr.OnPostGUI(position,property); + } + } + #endif +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MultiPropertyAttribute.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MultiPropertyAttribute.cs.meta new file mode 100644 index 00000000..9bda2a26 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MultiPropertyAttribute.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 71f4de68ec5de40edbf3e4f24c49ba18 +timeCreated: 1511952779 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MultiRange.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MultiRange.cs new file mode 100644 index 00000000..dfb5a4c1 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MultiRange.cs @@ -0,0 +1,34 @@ +using System; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace Obi{ + + [System.AttributeUsage(System.AttributeTargets.Field)] + public class MultiRange : MultiPropertyAttribute + { + float min; + float max; + public MultiRange(float min, float max) + { + this.min = min; + this.max = max; + } + #if UNITY_EDITOR + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + // Now draw the property as a Slider or an IntSlider based on whether it's a float or integer. + if (property.propertyType == SerializedPropertyType.Float) + EditorGUI.Slider(position, property, min, max, label); + else if (property.propertyType == SerializedPropertyType.Integer) + EditorGUI.IntSlider(position, property, (int)min, (int)max, label); + else + EditorGUI.LabelField(position, label.text, "Use MultiRange with float or int."); + } + #endif + } + +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MultiRange.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MultiRange.cs.meta new file mode 100644 index 00000000..946d7f26 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/MultiRange.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ab2178abf0a6343e19742febdd9784e3 +timeCreated: 1511954360 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/SerializeProperty.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/SerializeProperty.cs new file mode 100644 index 00000000..b5863040 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/SerializeProperty.cs @@ -0,0 +1,168 @@ +using System; +using System.Reflection; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace Obi{ + + [System.AttributeUsage(System.AttributeTargets.Field)] + public class SerializeProperty : PropertyAttribute + { + public string PropertyName { get; private set; } + + public SerializeProperty(string propertyName) + { + PropertyName = propertyName; + } + } + + #if UNITY_EDITOR + [CustomPropertyDrawer(typeof(SerializeProperty))] + public class SerializePropertyAttributeDrawer : PropertyDrawer + { + private PropertyInfo propertyFieldInfo = null; + private object target = null; + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + if (target == null) + target = GetSource(property); + + // Find the property field using reflection, in order to get access to its getter/setter. + if (propertyFieldInfo == null) + propertyFieldInfo = target.GetType().GetProperty(((SerializeProperty)attribute).PropertyName, + BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + + if (propertyFieldInfo != null) + { + // Retrieve the value using the property getter: + object value = propertyFieldInfo.GetValue(target,null); + + // Draw the property: + EditorGUI.BeginProperty(position,label,property); + EditorGUI.BeginChangeCheck(); + value = DrawProperty(position,property.propertyType,propertyFieldInfo.PropertyType,value,label); + + // If any changes were detected, call the property setter: + if (EditorGUI.EndChangeCheck() && propertyFieldInfo != null) + { + foreach (var t in property.serializedObject.targetObjects) + { + // Record object state for undo: + Undo.RecordObject(t, "Inspector"); + + // Call property setter: + propertyFieldInfo.SetValue(t, value, null); + SetPropertyValue(property, propertyFieldInfo.PropertyType, value); + + // Record prefab modification: + PrefabUtility.RecordPrefabInstancePropertyModifications(t); + } + } + EditorGUI.EndProperty(); + + }else + { + EditorGUI.LabelField(position,"Error: could not retrieve property."); + } + } + + private object GetSource(SerializedProperty property) + { + object trgt = property.serializedObject.targetObject; + string[] data = property.propertyPath.Split('.'); + + if (data.Length == 1) + return trgt; + else{ + for (int i = 0; i < data.Length-1;++i){ + trgt = trgt.GetType().GetField(data[i]).GetValue(trgt); + } + } + + return trgt; + } + + private object DrawProperty(Rect position, SerializedPropertyType propertyType, Type type, object value, GUIContent label) + { + switch (propertyType) + { + case SerializedPropertyType.Integer: + return EditorGUI.IntField(position,label,(int)value); + case SerializedPropertyType.Boolean: + return EditorGUI.Toggle(position,label,(bool)value); + case SerializedPropertyType.Float: + return EditorGUI.FloatField(position,label,(float)value); + case SerializedPropertyType.String: + return EditorGUI.TextField(position,label,(string)value); + case SerializedPropertyType.Color: + return EditorGUI.ColorField(position,label,(Color)value); + case SerializedPropertyType.ObjectReference: + return EditorGUI.ObjectField(position,label,(UnityEngine.Object)value,type,true); + case SerializedPropertyType.ExposedReference: + return EditorGUI.ObjectField(position,label,(UnityEngine.Object)value,type,true); + case SerializedPropertyType.LayerMask: + return EditorGUI.LayerField(position,label,(int)value); + case SerializedPropertyType.Enum: + return EditorGUI.EnumPopup(position,label,(Enum)value); + case SerializedPropertyType.Vector2: + return EditorGUI.Vector2Field(position,label,(Vector2)value); + case SerializedPropertyType.Vector3: + return EditorGUI.Vector3Field(position,label,(Vector3)value); + case SerializedPropertyType.Vector4: + return EditorGUI.Vector4Field(position,label,(Vector4)value); + case SerializedPropertyType.Rect: + return EditorGUI.RectField(position,label,(Rect)value); + case SerializedPropertyType.AnimationCurve: + return EditorGUI.CurveField(position,label,(AnimationCurve)value); + case SerializedPropertyType.Bounds: + return EditorGUI.BoundsField(position,label,(Bounds)value); + default: + 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/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/SerializeProperty.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/SerializeProperty.cs.meta new file mode 100644 index 00000000..ce59fb05 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/SerializeProperty.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9b22b3eff389444b1b4ab3bc2d6402b6 +timeCreated: 1511456560 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/VisibleIf.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/VisibleIf.cs new file mode 100644 index 00000000..16920a9b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/VisibleIf.cs @@ -0,0 +1,63 @@ +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif +using System.Reflection; + +namespace Obi{ + + [System.AttributeUsage(System.AttributeTargets.Field)] + public class VisibleIf : MultiPropertyAttribute + { + public string MethodName { get; private set; } + public bool Negate {get; private set;} + + private MethodInfo eventMethodInfo = null; + private FieldInfo fieldInfo = null; + private PropertyInfo propertyInfo = null; + + public VisibleIf(string methodName, bool negate = false) + { + this.MethodName = methodName; + this.Negate = negate; + } + + #if UNITY_EDITOR + internal override bool IsVisible(SerializedProperty property) + { + return Visibility(property) == !Negate; + } + + private bool Visibility(SerializedProperty property) + { + System.Type eventOwnerType = property.serializedObject.targetObject.GetType(); + string eventName = MethodName; + + // Try finding a method with the name provided: + if (eventMethodInfo == null) + eventMethodInfo = eventOwnerType.GetMethod(eventName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); + + // 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); + + // 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 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; + } + #endif + } + + +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/VisibleIf.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/VisibleIf.cs.meta new file mode 100644 index 00000000..c89b2e17 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Attributes/VisibleIf.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e52da649989a94da8b1a5d1e1fe5ff8a +timeCreated: 1511456085 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Coroutines.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/Coroutines.meta new file mode 100644 index 00000000..3ceb9d3e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Coroutines.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 232dbc8dfe1624cc3ac35594884d0edd +folderAsset: yes +timeCreated: 1438097540 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Coroutines/CoroutineJob.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/Coroutines/CoroutineJob.cs new file mode 100644 index 00000000..199ebcbe --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Coroutines/CoroutineJob.cs @@ -0,0 +1,130 @@ +using UnityEngine; +using System; +using System.Diagnostics; +using System.Collections; +using System.Collections.Generic; + +namespace Obi{ + +/** + * Implementation of asynchronous jobs that can return data, throw exceptions, and have a duration threshold + * below which they are run synchronously. + */ +public class CoroutineJob{ + + public class ProgressInfo{ + public string userReadableInfo; + public float progress; + public ProgressInfo(string userReadableInfo,float progress){ + this.userReadableInfo = userReadableInfo; + this.progress = progress; + } + } + + public object Result { + get{ + if(e != null){ + throw e; + } + return result; + } + } + + public bool IsDone{ + get{ + return isDone; + } + } + + public bool RaisedException{ + get{ + return raisedException; + } + } + + private object result; + private bool isDone; + private bool raisedException; + private bool stop; + private Exception e; + + 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; + raisedException = false; + stop = false; + result = null; + } + + /** + * Runs the provided coroutine in a completely syncrhonous way, just like it would if it wasn't a coroutine, and + * returns a list of all coroutine results, in the order they were yielded. Will immediately rethrow any exceptions thrown by the coroutine. + */ + public static object RunSynchronously(IEnumerator coroutine){ + + List results = new List(); + + if (coroutine == null){ + return results; + } + + try{ + while(coroutine.MoveNext()){ + results.Add(coroutine.Current); + } + }catch(Exception e){ + throw e; + } + + return results; + + } + + public IEnumerator Start(IEnumerator coroutine){ + + Init(); + + if (coroutine == null){ + isDone = true; + yield break; + } + + Stopwatch sw = new Stopwatch(); + sw.Start(); + + while(!stop){ + + try{ + if(!coroutine.MoveNext()){ + isDone = true; + sw.Stop(); + yield break; + } + } + catch(Exception e){ + this.e = e; + raisedException = true; + UnityEngine.Debug.LogException(e); + isDone = true; + sw.Stop(); + yield break; + } + + result = coroutine.Current; + + //If too much time has passed sine job start, switch to async mode: + if (sw.ElapsedMilliseconds > asyncThreshold){ + yield return result; + } + } + + } + + public void Stop(){ + stop = true; + } + +} +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Coroutines/CoroutineJob.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/Coroutines/CoroutineJob.cs.meta new file mode 100644 index 00000000..ec16b06f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Coroutines/CoroutineJob.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b34adb10b4f264b629f464bfc872d515 +timeCreated: 1438097545 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Coroutines/EditorCoroutine.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/Coroutines/EditorCoroutine.cs new file mode 100644 index 00000000..7a7f83bb --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Coroutines/EditorCoroutine.cs @@ -0,0 +1,36 @@ +using UnityEngine; +#if (UNITY_EDITOR) + using UnityEditor; +#endif +using System.Collections; + +namespace Obi +{ + public class EditorCoroutine + { + + public static bool ShowCoroutineProgressBar(string title, 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; + } + + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Coroutines/EditorCoroutine.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/Coroutines/EditorCoroutine.cs.meta new file mode 100644 index 00000000..023fca34 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Coroutines/EditorCoroutine.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 65c4fa737e0dc4ac8acb314d96b75115 +timeCreated: 1440488659 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Forces.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/Forces.meta new file mode 100644 index 00000000..bce277fb --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Forces.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 57e51b62adcc84dc19a301be9ebf0e51 +folderAsset: yes +timeCreated: 1480348631 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Forces/ObiForceZone.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/Forces/ObiForceZone.cs new file mode 100644 index 00000000..22d52ece --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Forces/ObiForceZone.cs @@ -0,0 +1,128 @@ +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 + { + if (forcezoneHandle == null || !forcezoneHandle.isValid) + { + 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("Pulse")] + public float pulseIntensity; + public float pulseFrequency; + public float pulseSeed; + + protected float intensityVariation; + + public void OnEnable() + { + FindSourceCollider(); + + //handle = ObiColliderWorld.GetInstance().CreateForceZone(); + //handle.owner = this; + } + + public void OnDisable() + { + RemoveCollider(); + ObiColliderWorld.GetInstance().DestroyForceZone(handle); + } + + 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() + { + 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; + ObiColliderWorld.GetInstance().forceZones[handle.index] = fc; + } + + public void Update() + { + if (Application.isPlaying) + intensityVariation = Mathf.PerlinNoise(Time.time * pulseFrequency, pulseSeed) * pulseIntensity; + } + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/Forces/ObiForceZone.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/Forces/ObiForceZone.cs.meta new file mode 100644 index 00000000..b0a77b8f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/Forces/ObiForceZone.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4978a525b6164476d96f5d28d8b309f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: d7b67d3b64785476bb7520aa3190fee3, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiContactEventDispatcher.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiContactEventDispatcher.cs new file mode 100644 index 00000000..9b021344 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiContactEventDispatcher.cs @@ -0,0 +1,154 @@ +using UnityEngine; +using UnityEngine.Events; +using System; +using System.Collections.Generic; + +namespace Obi +{ + [RequireComponent(typeof(ObiSolver))] + public class ObiContactEventDispatcher : MonoBehaviour + { + private ObiSolver solver; + private Oni.Contact[] prevData; + private int prevCount; + private ContactComparer comparer; + + private class ContactComparer : IComparer + { + ObiSolver solver; + + public ContactComparer(ObiSolver solver) + { + this.solver = solver; + } + + public int Compare(Oni.Contact x, Oni.Contact y) + { + return CompareByRef(ref x, ref y, solver); + } + } + + private static int CompareByRef(ref Oni.Contact a, ref Oni.Contact b, ObiSolver solver) + { + if (a.bodyB == b.bodyB) + { + int hashA = solver.particleToActor[a.bodyA].actor.GetInstanceID(); + int hashB = solver.particleToActor[b.bodyA].actor.GetInstanceID(); + return hashA.CompareTo(hashB); + } + return a.bodyB.CompareTo(b.bodyB); + } + + [System.Serializable] + public class ContactCallback : UnityEvent { } + + public float distanceThreshold = 0.01f; + public ContactCallback onContactEnter = new ContactCallback(); + public ContactCallback onContactStay = new ContactCallback(); + public ContactCallback onContactExit = new ContactCallback(); + + void Awake() + { + solver = GetComponent(); + comparer = new ContactComparer(solver); + prevData = new Oni.Contact[0]; + } + + void OnEnable() + { + solver.OnCollision += Solver_OnCollision; + } + + void OnDisable() + { + solver.OnCollision -= Solver_OnCollision; + } + + private int FilterOutDistantContacts(Oni.Contact[] data, int count) + { + int filteredCount = count; + + // simply iterate trough all contacts, + // 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]); + + return filteredCount; + } + + private int RemoveDuplicates(Oni.Contact[] data, int count) + { + if (count == 0) + return 0; + + // assuming the array is sorted, iterate trough the array + // 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) + data[r] = data[i]; + + return ++r; + } + + private void InvokeCallbacks(Oni.Contact[] data, int count) + { + int a = 0, b = 0; + int lengthA = count, lengthB = prevCount; + + // while we haven't reached the end of either array: + while (a < lengthA && b < lengthB) + { + // compare both contacts: + int compare = CompareByRef(ref data[a], ref prevData[b], solver); + + // call the appropiate event depending on the comparison result: + if (compare < 0) + onContactEnter.Invoke(solver, data[a++]); + else if (compare > 0) + onContactExit.Invoke(solver, prevData[b++]); + else + { + onContactStay.Invoke(solver, data[a++]); b++; + } + } + + // finish iterating trough both lists: + while (a < lengthA) + onContactEnter.Invoke(solver, data[a++]); + + while (b < lengthB) + onContactExit.Invoke(solver, prevData[b++]); + } + + 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(contacts, args.contacts.Count); + + // sort the remaining contacts by collider, then by actor: + Array.Sort(args.contacts.Data, 0, filteredCount, comparer); + + // remove duplicates: + filteredCount = RemoveDuplicates(args.contacts.Data, filteredCount); + + // zip trough the current and previous contact lists once, invoking events when appropiate. + InvokeCallbacks(args.contacts.Data, 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); + + prevCount = filteredCount;*/ + } + + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiContactEventDispatcher.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiContactEventDispatcher.cs.meta new file mode 100644 index 00000000..35dc302e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiContactEventDispatcher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e94f08d8fe9ed4bdcbc71dde235e0ac1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiContactGrabber.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiContactGrabber.cs new file mode 100644 index 00000000..caadb3b8 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiContactGrabber.cs @@ -0,0 +1,178 @@ +using UnityEngine; +using System.Collections.Generic; +using Obi; + +/** + * Sample component that makes a collider "grab" any particle it touches (regardless of which Actor it belongs to). + */ +[RequireComponent(typeof(ObiCollider))] +public class ObiContactGrabber : MonoBehaviour +{ + + public ObiSolver[] solvers = { }; + + public bool grabbed + { + get { return grabbedActors.Count > 0; } + } + + /** + * Helper class that stores the index of a particle in the solver, its position in the grabber's local space, and its inverse mass previous to being grabbed. + * This makes it easy to tell if a particle has been grabbed, update its position while grabbing, and restore its mass after being released. + */ + private class GrabbedParticle : IEqualityComparer + { + public int index; + public float invMass; + public Vector3 localPosition; + public ObiSolver solver; + + public GrabbedParticle(ObiSolver solver, int index, float invMass) + { + this.solver = solver; + this.index = index; + this.invMass = invMass; + } + + public bool Equals(GrabbedParticle x, GrabbedParticle y) + { + return x.index == y.index; + } + + public int GetHashCode(GrabbedParticle obj) + { + return index; + } + } + + 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.*/ + + private void Awake() + { + localCollider = GetComponent(); + } + + private void OnEnable() + { + if (solvers != null) + foreach (ObiSolver solver in solvers) + solver.OnCollision += Solver_OnCollision; + } + + private void OnDisable() + { + if (solvers != null) + foreach (ObiSolver solver in solvers) + solver.OnCollision -= Solver_OnCollision; + } + + private void Solver_OnCollision(object sender, ObiNativeContactList e) + { + collisionEvents[(ObiSolver)sender] = e; + } + + private void UpdateParticleProperties() + { + // Update rest shape matching of all grabbed softbodies: + foreach (ObiActor actor in grabbedActors) + { + actor.UpdateParticleProperties(); + } + } + + /** + * Creates and stores a GrabbedParticle from the particle at the given index. + * Returns true if we sucessfully grabbed a particle, false if the particle was already grabbed. + */ + private bool GrabParticle(ObiSolver solver, int index) + { + GrabbedParticle p = new GrabbedParticle(solver, index, solver.invMasses[index]); + + // in case this particle has not been grabbed yet: + if (!grabbedParticles.Contains(p)) + { + Matrix4x4 solver2Grabber = transform.worldToLocalMatrix * solver.transform.localToWorldMatrix; + + // record the particle's position relative to the grabber, and store it. + p.localPosition = solver2Grabber.MultiplyPoint3x4(solver.positions[index]); + grabbedParticles.Add(p); + + // Set inv mass and velocity to zero: + solver.invMasses[index] = 0; + solver.velocities[index] = Vector4.zero; + + return true; + } + return false; + } + + /** + * Grabs all particles currently touching the grabber. + */ + public void Grab() + { + Release(); + + var world = ObiColliderWorld.GetInstance(); + + if (solvers != null && collisionEvents != null) + { + foreach (ObiSolver solver in solvers) + { + ObiNativeContactList collisionEvent; + if (collisionEvents.TryGetValue(solver, out collisionEvent)) + { + foreach (Oni.Contact contact in collisionEvent) + { + // this one is an actual collision: + if (contact.distance < 0.01f) + { + var contactCollider = world.colliderHandles[contact.bodyB].owner; + int particleIndex = solver.simplices[contact.bodyA]; + + // if the current contact references our collider, proceed to grab the particle. + if (contactCollider == localCollider) + { + // try to grab the particle, if not already grabbed. + if (GrabParticle(solver, particleIndex)) + grabbedActors.Add(solver.particleToActor[particleIndex].actor); + } + + } + } + } + } + } + + UpdateParticleProperties(); + } + + /** + * Releases all currently grabbed particles. This boils down to simply resetting their invMass. + */ + public void Release() + { + // Restore the inverse mass of all grabbed particles, so dynamics affect them. + foreach (GrabbedParticle p in grabbedParticles) + p.solver.invMasses[p.index] = p.invMass; + + UpdateParticleProperties(); + grabbedActors.Clear(); + grabbedParticles.Clear(); + } + + /** + * Updates the position of the grabbed particles. + */ + private void FixedUpdate() + { + foreach (GrabbedParticle p in grabbedParticles) + { + Matrix4x4 grabber2Solver = p.solver.transform.worldToLocalMatrix * transform.localToWorldMatrix; + p.solver.positions[p.index] = grabber2Solver.MultiplyPoint3x4(p.localPosition); + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiContactGrabber.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiContactGrabber.cs.meta new file mode 100644 index 00000000..d3efd975 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiContactGrabber.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4aa46c433c6d64b07bdfa8b2e40b03b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiFoamGenerator.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiFoamGenerator.cs new file mode 100644 index 00000000..86c33d8a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiFoamGenerator.cs @@ -0,0 +1,98 @@ +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 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; + [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/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiFoamGenerator.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiFoamGenerator.cs.meta new file mode 100644 index 00000000..a26a9e65 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiFoamGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 87b741a43af4845478fd8eff354a1510 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b7cec6e680e3a479ca03a89eccd4e052, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiIntegration.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiIntegration.cs new file mode 100644 index 00000000..8c0f5013 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiIntegration.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiIntegration.cs.meta new file mode 100644 index 00000000..819d6050 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiParticleAttachment.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiParticleAttachment.cs new file mode 100644 index 00000000..8f4022c8 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiParticleAttachment.cs @@ -0,0 +1,64 @@ +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; + + // 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 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 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(); } } } + + /// /// Whether this attachment is currently bound or not. /// public bool isBound { get { return m_Target != null && m_SolverIndices != null && m_PositionOffsets != null; } } + + /// /// 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 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. 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.OnSimulationStart += Actor_OnSimulate; 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.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); } void Actor_OnBlueprintLoaded(ObiActor act, ObiActorBlueprint blueprint) { Bind(); } void Actor_OnSimulate(ObiActor act, float stepTime, float substepTime) { + // Attachments must be updated at the start of the step, before performing any simulation. + UpdateAttachment(); + + // if there's any broken constraint, flag pin constraints as dirty for remerging at the start of the next step. + 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.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++; } + + // 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: + + // 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; + + // 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.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) + { + 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; } + + // in case the constraint has been broken: + if (-solverBatch.lambdas[(offset + i) * 4 + 3] / sqrTime > pinBatch.breakThresholds[i]) { pinBatch.DeactivateConstraint(i); dirty = true; } } } } + + // constraints are recreated at the start of a step. + if (dirty) m_Actor.SetConstraintsDirty(Oni.ConstraintType.Pin); } } } } \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiParticleAttachment.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiParticleAttachment.cs.meta new file mode 100644 index 00000000..8ba6d24e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiParticleAttachment.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d03c9194b7ab4aaba4dfa5afec22c69 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 528d201bc10084452b24974deb16a423, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiParticleDragger.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiParticleDragger.cs new file mode 100644 index 00000000..56449059 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiParticleDragger.cs @@ -0,0 +1,84 @@ +using System; +using UnityEngine; + +namespace Obi +{ + [RequireComponent(typeof(LineRenderer))] + [RequireComponent(typeof(ObiParticlePicker))] + public class ObiParticleDragger : MonoBehaviour + { + public float springStiffness = 500; + public float springDamping = 50; + public bool drawSpring = true; + + private LineRenderer lineRenderer; + private ObiParticlePicker picker; + private ObiParticlePicker.ParticlePickEventArgs pickArgs; + + void OnEnable() + { + lineRenderer = GetComponent(); + picker = GetComponent(); + 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; + } + + private void Solver_OnEndSimulation(ObiSolver solver, float timeToSimulate, float substepTime) + { + if (solver != null && pickArgs != null) + { + // Calculate picking position in solver space: + Vector4 targetPosition = solver.transform.InverseTransformPoint(pickArgs.worldPosition); + + // Calculate effective inverse mass: + float invMass = solver.invMasses[pickArgs.particleIndex]; + + if (invMass > 0) + { + // Calculate and apply spring force: + Vector4 position = solver.positions[pickArgs.particleIndex]; + Vector4 velocity = solver.velocities[pickArgs.particleIndex]; + solver.externalForces[pickArgs.particleIndex] = ((targetPosition - position) * springStiffness - velocity * springDamping) / invMass; + + if (drawSpring) + { + lineRenderer.positionCount = 2; + lineRenderer.SetPosition(0, pickArgs.worldPosition); + lineRenderer.SetPosition(1, solver.transform.TransformPoint(position)); + } + else + { + lineRenderer.positionCount = 0; + } + } + + } + } + + void Picker_OnParticleDragged(ObiParticlePicker.ParticlePickEventArgs e) + { + pickArgs = e; + } + + void Picker_OnParticleReleased(ObiParticlePicker.ParticlePickEventArgs e) + { + pickArgs = null; + lineRenderer.positionCount = 0; + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiParticleDragger.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiParticleDragger.cs.meta new file mode 100644 index 00000000..a950385e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiParticleDragger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 30e140e2334fb4e2f9430c6ed936e4ca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiParticlePicker.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiParticlePicker.cs new file mode 100644 index 00000000..8c2d7fdb --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiParticlePicker.cs @@ -0,0 +1,140 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +namespace Obi +{ + + public class ObiParticlePicker : MonoBehaviour + { + + public class ParticlePickEventArgs : EventArgs + { + + public int particleIndex; + public Vector3 worldPosition; + + public ParticlePickEventArgs(int particleIndex, Vector3 worldPosition) + { + this.particleIndex = particleIndex; + this.worldPosition = worldPosition; + } + } + + [Serializable] + public class ParticlePickUnityEvent : UnityEvent { } + + public ObiSolver solver; + public float radiusScale = 1; + + public ParticlePickUnityEvent OnParticlePicked; + public ParticlePickUnityEvent OnParticleHeld; + public ParticlePickUnityEvent OnParticleDragged; + public ParticlePickUnityEvent OnParticleReleased; + + private Vector3 lastMousePos = Vector3.zero; + private int pickedParticleIndex = -1; + private float pickedParticleDepth = 0; + + void Awake() + { + lastMousePos = Input.mousePosition; + } + + void LateUpdate() + { + + if (solver != null) + { + + // Click: + if (Input.GetMouseButtonDown(0)) + { + + pickedParticleIndex = -1; + + Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); + + float closestMu = float.MaxValue; + float closestDistance = float.MaxValue; + + Matrix4x4 solver2World = solver.transform.localToWorldMatrix; + + // Find the closest particle hit by the ray: + for (int i = 0; i < solver.positions.count; ++i) + { + + Vector3 worldPos = solver2World.MultiplyPoint3x4(solver.positions[i]); + + float mu; + 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: + mu = Mathf.Max(0, mu); + + float radius = solver.principalRadii[i][0] * radiusScale; + + if (distanceToRay <= radius * radius && distanceToRay < closestDistance && mu < closestMu) + { + closestMu = mu; + closestDistance = distanceToRay; + pickedParticleIndex = i; + } + } + + if (pickedParticleIndex >= 0) + { + + pickedParticleDepth = Camera.main.transform.InverseTransformVector(solver2World.MultiplyPoint3x4(solver.positions[pickedParticleIndex]) - Camera.main.transform.position).z; + + if (OnParticlePicked != null) + { + Vector3 worldPosition = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, pickedParticleDepth)); + OnParticlePicked.Invoke(new ParticlePickEventArgs(pickedParticleIndex, worldPosition)); + } + } + + } + else if (pickedParticleIndex >= 0) + { + + // Drag: + Vector3 mouseDelta = Input.mousePosition - lastMousePos; + if (mouseDelta.magnitude > 0.01f && OnParticleDragged != null) + { + + Vector3 worldPosition = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, pickedParticleDepth)); + OnParticleDragged.Invoke(new ParticlePickEventArgs(pickedParticleIndex, worldPosition)); + + } + else if (OnParticleHeld != null) + { + + Vector3 worldPosition = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, pickedParticleDepth)); + OnParticleHeld.Invoke(new ParticlePickEventArgs(pickedParticleIndex, worldPosition)); + + } + + // Release: + if (Input.GetMouseButtonUp(0)) + { + + if (OnParticleReleased != null) + { + Vector3 worldPosition = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, pickedParticleDepth)); + OnParticleReleased.Invoke(new ParticlePickEventArgs(pickedParticleIndex, worldPosition)); + } + + pickedParticleIndex = -1; + + } + } + } + + lastMousePos = Input.mousePosition; + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiParticlePicker.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiParticlePicker.cs.meta new file mode 100644 index 00000000..286f8912 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiParticlePicker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: db4318b9b044a420ba02ad5138d542e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 0f9d020f7c659443a93327a34ede18b4, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiStitcher.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiStitcher.cs new file mode 100644 index 00000000..80547b9a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiStitcher.cs @@ -0,0 +1,232 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +namespace Obi +{ + /** + * ObiStitcher will create stitch constraints between 2 actors. All actors must be assigned to the same solver. + * - Add the constraint batch to the solver once all actors have been added. + * - If any of the actors is removed from the solver, remove the stitcher too. + * - Stitch constraints can keep n particles together, respecting their masses. + * - In edit mode, select the actors to be stitched and then select groups of particles and click "stitch". Or, create stitches by closeness. + */ + [ExecuteInEditMode] + public class ObiStitcher : MonoBehaviour + { + [Serializable] + public class Stitch + { + public int particleIndex1; + public int particleIndex2; + + public Stitch(int particleIndex1, int particleIndex2) + { + this.particleIndex1 = particleIndex1; + this.particleIndex2 = particleIndex2; + } + } + + [SerializeField] [HideInInspector] private List stitches = new List(); + + [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(); + + //private IntPtr batch; + private IStitchConstraintsBatchImpl m_BatchImpl; + private bool inSolver = false; + + public ObiActor Actor1 + { + set + { + if (actor1 != value) + { + UnregisterActor(actor1); + actor1 = value; + RegisterActor(actor1); + } + } + get { return actor1; } + } + + public ObiActor Actor2 + { + set + { + if (actor2 != value) + { + UnregisterActor(actor2); + actor2 = value; + RegisterActor(actor2); + } + } + get { return actor2; } + } + + public int StitchCount + { + get { return stitches.Count; } + } + + public IEnumerable Stitches + { + get { return stitches.AsReadOnly(); } + } + + private void RegisterActor(ObiActor actor) + { + if (actor != null) + { + actor.OnBlueprintLoaded += Actor_OnBlueprintLoaded; + actor.OnBlueprintUnloaded += Actor_OnBlueprintUnloaded; + + if (actor.solver != null) + Actor_OnBlueprintLoaded(actor, actor.sourceBlueprint); + + } + } + + private void UnregisterActor(ObiActor actor) + { + if (actor != null) + { + actor.OnBlueprintLoaded -= Actor_OnBlueprintLoaded; + actor.OnBlueprintUnloaded -= Actor_OnBlueprintUnloaded; + + if (actor.solver != null) + Actor_OnBlueprintUnloaded(actor, actor.sourceBlueprint); + } + } + + public void OnEnable() + { + RegisterActor(actor1); + RegisterActor(actor2); + } + + public void OnDisable() + { + UnregisterActor(actor1); + UnregisterActor(actor2); + } + + /** + * Adds a new stitch to the stitcher. Note that unlike calling Clear(), AddStitch does not automatically perform a + * PushDataToSolver(). You should manually call it once you're done adding multiple stitches. + * @param index of a particle in the first actor. + * @param index of a particle in the second actor. + * @return constrant index, that can be used to remove it with a call to RemoveStitch. + */ + public int AddStitch(int particle1, int particle2) + { + stitches.Add(new Stitch(particle1, particle2)); + return stitches.Count - 1; + } + + /** + * Removes. Note that unlike calling Clear(), AddStitch does not automatically perform a + * PushDataToSolver(). You should manually call it once you're done adding multiple stitches. + * @param constraint index. + */ + public void RemoveStitch(int index) + { + if (index >= 0 && index < stitches.Count) + stitches.RemoveAt(index); + } + + public void Clear() + { + stitches.Clear(); + PushDataToSolver(); + } + + void Actor_OnBlueprintUnloaded(ObiActor actor, ObiActorBlueprint blueprint) + { + // when any actor is removed from solver, remove stitches. + this.RemoveFromSolver(actor.solver); + } + + void Actor_OnBlueprintLoaded(ObiActor actor, ObiActorBlueprint blueprint) + { + // when both actors are in the same solver, add stitches. + if (actor1 != null && actor2 != null && actor1.isLoaded && actor2.isLoaded) + { + + if (actor1.solver != actor2.solver) + { + Debug.LogError("ObiStitcher cannot handle actors in different solvers."); + return; + } + + AddToSolver(actor1.solver); + } + } + + private void AddToSolver(ObiSolver solver) + { + if (!inSolver) + { + + inSolver = true; + + // create a constraint batch (CreateStitchConstraints() in burst returns a singleton): + m_BatchImpl = solver.implementation.CreateConstraintsBatch(Oni.ConstraintType.Stitch) as IStitchConstraintsBatchImpl; + + // push current data to solver: + PushDataToSolver(); + + // enable/disable the batch: + m_BatchImpl.enabled = isActiveAndEnabled; + } + + } + + private void RemoveFromSolver(ObiSolver solver) + { + // remove the constraint batch from the solver + // (no need to destroy it as its destruction is managed by the solver) + // Oni.RemoveBatch(actor1.solver.OniSolver, batch); + if (inSolver && m_BatchImpl != null) + { + solver.implementation.DestroyConstraintsBatch(m_BatchImpl as IStitchConstraintsBatchImpl); + m_BatchImpl.Destroy(); + m_BatchImpl = null; + + inSolver = false; + } + + } + + public void PushDataToSolver() + { + + if (!inSolver) + return; + + // set solver constraint data: + lambdas.Clear(); + particleIndices.ResizeUninitialized(stitches.Count * 2); + stiffnesses.ResizeUninitialized(stitches.Count); + lambdas.ResizeUninitialized(stitches.Count); + + for (int i = 0; i < stitches.Count; i++) + { + particleIndices[i * 2] = actor1.solverIndices[stitches[i].particleIndex1]; + particleIndices[i * 2 + 1] = actor2.solverIndices[stitches[i].particleIndex2]; + stiffnesses[i] = 0; + lambdas[i] = 0; + } + + m_BatchImpl.SetStitchConstraints(particleIndices, stiffnesses, lambdas, stitches.Count); + + } + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiStitcher.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiStitcher.cs.meta new file mode 100644 index 00000000..64a1aa9c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiStitcher.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cdace116829344344988718be4fb70ab +timeCreated: 1489589304 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: ec05a2c75bb4a4ce5a3a1baa76b4c8d5, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiUtils.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiUtils.cs new file mode 100644 index 00000000..57c47405 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiUtils.cs @@ -0,0 +1,83 @@ +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 } // 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" }; 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 void DebugDrawBox(Vector3 pos, Quaternion rot, Vector3 scale, Color c) + { + // create matrix + Matrix4x4 m = new Matrix4x4(); + m.SetTRS(pos, rot, scale); + + 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)); + + 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)); + + Debug.DrawLine(point1, point2, c); + Debug.DrawLine(point2, point3, c); + Debug.DrawLine(point3, point4, c); + Debug.DrawLine(point4, point1, c); + + 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) { 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; } [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 the current batch with the result, // advance to the next one. if (!resultBatch.TryMergeWith(batches[i])) batches[++current] = batches[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; } + + public unsafe static Vector3 OctDecode(float k) + { + 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); + } + + public unsafe static Vector4 UnpackFloatRGBA(float v) + { + 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 unsafe static float PackFloatRGBA(Vector4 enc) + { + 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 unsafe static Vector2 UnpackFloatRG(float v) + { + 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/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiUtils.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiUtils.cs.meta new file mode 100644 index 00000000..455098f6 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiUtils.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8ac31071459b040f39f1d86300525ed4 +timeCreated: 1435569421 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiVectorMath.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiVectorMath.cs new file mode 100644 index 00000000..5be0c7ea --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiVectorMath.cs @@ -0,0 +1,48 @@ +using UnityEngine; +using System.Collections; + + +namespace Obi +{ + public static class ObiVectorMath + { + public static void Cross(Vector3 a, Vector3 b, ref float x, ref float y, ref float z) + { + x = a.y * b.z - a.z * b.y; + y = a.z * b.x - a.x * b.z; + z = a.x * b.y - a.y * b.x; + } + + public static void Cross(Vector3 a, Vector3 b, ref Vector3 res) + { + res.x = a.y * b.z - a.z * b.y; + res.y = a.z * b.x - a.x * b.z; + res.z = a.x * b.y - a.y * b.x; + } + + public static void Cross(float ax, float ay, float az, float bx, float by, float bz, ref float x, ref float y, ref float z) + { + x = ay * bz - az * by; + y = az * bx - ax * bz; + z = ax * by - ay * bx; + } + + /** + * res = b - a + */ + public static void Subtract(Vector3 a, Vector3 b, ref Vector3 res) + { + res.x = b.x - a.x; + res.y = b.y - a.y; + res.z = b.z - a.z; + } + + public static void BarycentricInterpolation(Vector3 p1, Vector3 p2, Vector3 p3, Vector3 n1, Vector3 n2, Vector3 n3, Vector3 coords, float height, ref Vector3 res) + { + res.x = coords.x * p1.x + coords.y * p2.x + coords.z * p3.x + (coords.x * n1.x + coords.y * n2.x + coords.z * n3.x) * height; + res.y = coords.x * p1.y + coords.y * p2.y + coords.z * p3.y + (coords.x * n1.y + coords.y * n2.y + coords.z * n3.y) * height; + res.z = coords.x * p1.z + coords.y * p2.z + coords.z * p3.z + (coords.x * n1.z + coords.y * n2.z + coords.z * n3.z) * height; + } + + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiVectorMath.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiVectorMath.cs.meta new file mode 100644 index 00000000..fee9b11e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/ObiVectorMath.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e41ed0a6b70c4f6bae2b72f0a3f89e4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/SetCategory.cs b/xiaofang/Assets/Obi/Scripts/Common/Utils/SetCategory.cs new file mode 100644 index 00000000..55ce6cea --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/SetCategory.cs @@ -0,0 +1,38 @@ +using UnityEngine; + +namespace Obi +{ + [RequireComponent(typeof(ObiActor))] + public class SetCategory : MonoBehaviour + { + public int category; + private ObiActor act; + + private void Awake() + { + act = GetComponent(); + act.OnBlueprintLoaded += OnLoad; + + if (act.isLoaded) + act.SetFilterCategory(category); + } + + private void OnDestroy() + { + act.OnBlueprintLoaded -= OnLoad; + } + + private void OnValidate() + { + category = Mathf.Clamp(category, ObiUtils.MinCategory, ObiUtils.MaxCategory); + + if (act != null && act.isLoaded) + act.SetFilterCategory(category); + } + + private void OnLoad(ObiActor actor, ObiActorBlueprint blueprint) + { + actor.SetFilterCategory(category); + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Common/Utils/SetCategory.cs.meta b/xiaofang/Assets/Obi/Scripts/Common/Utils/SetCategory.cs.meta new file mode 100644 index 00000000..e9c9e89a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Common/Utils/SetCategory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 011ecd7e601cf4613b5b59bfd9d70895 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Obi.asmdef b/xiaofang/Assets/Obi/Scripts/Obi.asmdef new file mode 100644 index 00000000..abde79cb --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Obi.asmdef @@ -0,0 +1,42 @@ +{ + "name": "Obi", + "references": [ + "GUID:15fc0a57446b3144c949da3e2b9737a9", + "GUID:c579267770062bf448e75eb160330b7f", + "GUID:df380645f10b7bc4b97d4f5eb6303d95", + "GUID:3eae0364be2026648bf74846acb8a731", + "GUID:d8b63aba1907145bea998dd612889d6b", + "GUID:2665a8d13d1b3f18800f46e256720795", + "GUID:e0cd26848372d4e5c891c569017e11f1" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": true, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [ + { + "name": "com.unity.render-pipelines.universal", + "expression": "7.4.1", + "define": "SRP_UNIVERSAL" + }, + { + "name": "com.unity.collections", + "expression": "0.8.0-preview.5", + "define": "OBI_COLLECTIONS" + }, + { + "name": "com.unity.burst", + "expression": "1.2.3-verified", + "define": "OBI_BURST" + }, + { + "name": "com.unity.mathematics", + "expression": "1.0.1", + "define": "OBI_MATHEMATICS" + } + ], + "noEngineReferences": false +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/Obi.asmdef.meta b/xiaofang/Assets/Obi/Scripts/Obi.asmdef.meta new file mode 100644 index 00000000..dba7c0b6 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Obi.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: da7abd44cdeea48609605c1c2c9609c0 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/Oni.cs b/xiaofang/Assets/Obi/Scripts/Oni.cs new file mode 100644 index 00000000..f04dca4e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Oni.cs @@ -0,0 +1,248 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Runtime.InteropServices; +using Obi; + + +public static class Oni +{ + public const int ConstraintTypeCount = 17; + 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 + }; + + [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 + { + Sphere = 0, + Box = 1, + Capsule = 2, + Heightmap = 3, + TriangleMesh = 4, + EdgeMesh = 5, + SignedDistanceField = 6 + } + + public enum MaterialCombineMode + { + Average = 0, + Minimum = 1, + Multiply = 2, + Maximum = 3 + } + + [Serializable] + [StructLayout(LayoutKind.Sequential)] + public struct SolverParameters + { + + public enum Interpolation + { + None, + Interpolate, + Extrapolate + }; + + public enum Mode + { + Mode3D, + Mode2D, + }; + + [Tooltip("In 2D mode, particles are simulated on the XY plane only. For use in conjunction with Unity's 2D mode.")] + public Mode mode; + + [Tooltip("Same as Rigidbody.interpolation. Set to INTERPOLATE for cloth that is applied on a main character or closely followed by a camera. NONE for everything else.")] + public Interpolation interpolation; + + [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; + + [Tooltip("Max ratio between a particle's longest and shortest axis. Use 1 for isotropic (completely round) particles.")] + [Range(1, 5)] + public float maxAnisotropy; + + [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 particleCCD; + + [Tooltip("Percentage of shock propagation applied to particle-particle collisions. Useful for particle stacking.")] + [Range(0, 1)] + public float shockPropagation; + + [Tooltip("Amount of iterations spent on convex optimization for surface collisions.")] + [Range(1, 32)] + public int surfaceCollisionIterations; + + [Tooltip("Error threshold at which to stop convex optimization for surface collisions.")] + public float surfaceCollisionTolerance; + + + 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; + surfaceCollisionTolerance = 0.005f; + maxAnisotropy = 3; + maxDepenetration = 10; + sleepThreshold = 0.0005f; + maxVelocity = 50.0f; + maxAngularVelocity = 20.0f; + collisionMargin = 0.02f; + colliderCCD = 1; + particleCCD = 0; + } + + } + + [Serializable] + public struct ConstraintParameters + { + + public enum EvaluationOrder + { + Sequential, + Parallel + }; + + [Tooltip("Order in which constraints are evaluated. SEQUENTIAL converges faster but is not very stable. PARALLEL is very stable but converges slowly, requiring more iterations to achieve the same result.")] + public EvaluationOrder evaluationOrder; /**< Constraint evaluation order.*/ + + [Tooltip("Number of relaxation iterations performed by the constraint solver. A low number of iterations will perform better, but be less accurate.")] + public int iterations; /**< Amount of solver iterations per step for this constraint group.*/ + + [Tooltip("Over (or under if < 1) relaxation factor used. At 1, no overrelaxation is performed. At 2, constraints double their relaxation rate. High values reduce stability but improve convergence.")] + [Range(0.1f, 2)] + public float SORFactor; /**< Sucessive over-relaxation factor for parallel evaluation order.*/ + + [Tooltip("Whether this constraint group is solved or not.")] + [MarshalAs(UnmanagedType.I1)] + public bool enabled; + + public ConstraintParameters(bool enabled, EvaluationOrder order, int iterations) + { + this.enabled = enabled; + this.iterations = iterations; + this.evaluationOrder = order; + this.SORFactor = 1; + } + + } + + [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 float distance; /** distance between both colliding entities at the beginning of the timestep.*/ + + public float normalImpulse; + public float tangentImpulse; + public float bitangentImpulse; + public float stickImpulse; + public float rollingFrictionImpulse; + + public int bodyA; /** simplex index*/ + public int bodyB; /** simplex or rigidbody index*/ + } +} diff --git a/xiaofang/Assets/Obi/Scripts/Oni.cs.meta b/xiaofang/Assets/Obi/Scripts/Oni.cs.meta new file mode 100644 index 00000000..e878c137 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/Oni.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: df1db1289f87d47fb934d1fdb2ed9965 +timeCreated: 1442803224 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod.meta new file mode 100644 index 00000000..b70af415 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a5d5467b3dbba47dab7f72d43fcd6ebe +labels: +- ObiRope +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors.meta new file mode 100644 index 00000000..225b6359 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: abc784de05f944701a4dff27d147b35f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiBone.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiBone.cs new file mode 100644 index 00000000..8a33592b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiBone.cs @@ -0,0 +1,690 @@ +using UnityEngine; +using System; +using System.Collections.Generic; + +namespace Obi +{ + [AddComponentMenu("Physics/Obi/Obi Bone", 882)] + [ExecuteInEditMode] + [DisallowMultipleComponent] + [DefaultExecutionOrder(100)] // make sure ObiBone's LateUpdate is updated after ObiSolver's. + public class ObiBone : ObiActor, IStretchShearConstraintsUser, IBendTwistConstraintsUser, ISkinConstraintsUser, IAerodynamicConstraintsUser + { + [Serializable] + public class BonePropertyCurve + { + [Min(0)] + public float multiplier; + public AnimationCurve curve; + + public BonePropertyCurve(float multiplier, float curveValue) + { + this.multiplier = multiplier; + this.curve = new AnimationCurve(new Keyframe(0, curveValue), new Keyframe(1, curveValue)); + } + + public float Evaluate(float time) + { + return curve.Evaluate(time) * multiplier; + } + } + + [Serializable] + public class IgnoredBone + { + public Transform bone; + public bool ignoreChildren; + } + + [NonSerialized] protected ObiBoneBlueprint m_BoneBlueprint; + + [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); + + // skin constraints: + [SerializeField] protected bool _skinConstraintsEnabled = true; + [SerializeField] protected BonePropertyCurve _skinCompliance = new BonePropertyCurve(0.01f, 1); + [SerializeField] protected BonePropertyCurve _skinRadius = new BonePropertyCurve(0.1f, 1); + + // distance constraints: + [SerializeField] protected bool _stretchShearConstraintsEnabled = true; + [SerializeField] protected BonePropertyCurve _stretchCompliance = new BonePropertyCurve(0, 1); + [SerializeField] protected BonePropertyCurve _shear1Compliance = new BonePropertyCurve(0, 1); + [SerializeField] protected BonePropertyCurve _shear2Compliance = new BonePropertyCurve(0, 1); + + // bend constraints: + [SerializeField] protected bool _bendTwistConstraintsEnabled = true; + [SerializeField] protected BonePropertyCurve _torsionCompliance = new BonePropertyCurve(0, 1); + [SerializeField] protected BonePropertyCurve _bend1Compliance = new BonePropertyCurve(0, 1); + [SerializeField] protected BonePropertyCurve _bend2Compliance = new BonePropertyCurve(0, 1); + [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); + + public bool fixRoot = true; + public bool stretchBones = true; + public List ignored = new List(); + + /// + /// Collision filter value used by fluid particles. + /// + public int Filter + { + set + { + if (filter != value) + { + filter = value; + UpdateFilter(); + } + } + get { return filter; } + } + + /// + /// Whether particles in this actor colide with particles using the same phase value. + /// + public bool selfCollisions + { + get { return m_SelfCollisions; } + set { if (value != m_SelfCollisions) { m_SelfCollisions = value; SetSelfCollisions(m_SelfCollisions); } } + } + + /// + /// Particle radius distribution over this bone hierarchy length. + /// + public BonePropertyCurve radius + { + get { return _radius; } + set { _radius = value; UpdateRadius(); } + } + + /// + /// Mass distribution over this bone hierarchy length. + /// + public BonePropertyCurve mass + { + get { return _mass; } + set { _mass = value; UpdateMasses(); } + } + + /// + /// Rotational mass distribution over this bone hierarchy length. + /// + public BonePropertyCurve rotationalMass + { + get { return _rotationalMass; } + set { _rotationalMass = value; UpdateMasses(); } + } + + /// + /// Whether this actor's skin constraints are enabled. + /// + public bool skinConstraintsEnabled + { + get { return _skinConstraintsEnabled; } + set { if (value != _skinConstraintsEnabled) { _skinConstraintsEnabled = value; SetConstraintsDirty(Oni.ConstraintType.Skin); } } + } + + /// + /// Compliance of this actor's skin constraints. + /// + public BonePropertyCurve skinCompliance + { + get { return _skinCompliance; } + set { _skinCompliance = value; SetConstraintsDirty(Oni.ConstraintType.Skin); } + } + + /// + /// Compliance of this actor's skin radius + /// + public BonePropertyCurve skinRadius + { + get { return _skinRadius; } + set { _skinRadius = value; SetConstraintsDirty(Oni.ConstraintType.Skin); } + } + + /// + /// Whether this actor's stretch/shear constraints are enabled. + /// + public bool stretchShearConstraintsEnabled + { + get { return _stretchShearConstraintsEnabled; } + set { if (value != _stretchShearConstraintsEnabled) { _stretchShearConstraintsEnabled = value; SetConstraintsDirty(Oni.ConstraintType.StretchShear); } } + } + + /// + /// Compliance of this actor's stretch/shear constraints, along their length. + /// + public BonePropertyCurve stretchCompliance + { + get { return _stretchCompliance; } + set { _stretchCompliance = value; SetConstraintsDirty(Oni.ConstraintType.StretchShear); } + } + + /// + /// Shearing compliance of this actor's stretch/shear constraints, along the first axis orthogonal to their length. + /// + public BonePropertyCurve shear1Compliance + { + get { return _shear1Compliance; } + set { _shear1Compliance = value; SetConstraintsDirty(Oni.ConstraintType.StretchShear); } + } + + /// + /// Shearing compliance of this actor's stretch/shear constraints, along the second axis orthogonal to their length. + /// + public BonePropertyCurve shear2Compliance + { + get { return _shear2Compliance; } + set { _shear2Compliance = value; SetConstraintsDirty(Oni.ConstraintType.StretchShear); } + } + + /// + /// Whether this actor's bend/twist constraints are enabled. + /// + public bool bendTwistConstraintsEnabled + { + get { return _bendTwistConstraintsEnabled; } + set { if (value != _bendTwistConstraintsEnabled) { _bendTwistConstraintsEnabled = value; SetConstraintsDirty(Oni.ConstraintType.BendTwist); } } + } + + /// + /// Torsional compliance of this actor's bend/twist constraints along their length. + /// + public BonePropertyCurve torsionCompliance + { + get { return _torsionCompliance; } + set { _torsionCompliance = value; SetConstraintsDirty(Oni.ConstraintType.BendTwist); } + } + + /// + /// Bending compliance of this actor's bend/twist constraints along the first axis orthogonal to their length. + /// + public BonePropertyCurve bend1Compliance + { + get { return _bend1Compliance; } + set { _bend1Compliance = value; SetConstraintsDirty(Oni.ConstraintType.BendTwist); } + } + + /// + /// Bending compliance of this actor's bend/twist constraints along the second axis orthogonal to their length. + /// + public BonePropertyCurve bend2Compliance + { + get { return _bend2Compliance; } + set { _bend2Compliance = value; 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 BonePropertyCurve plasticYield + { + get { return _plasticYield; } + set { _plasticYield = value; SetConstraintsDirty(Oni.ConstraintType.BendTwist); } + } + + /// + /// Percentage of deformation that gets absorbed into the rest shape per second, once deformation goes above the threshold. + /// + public BonePropertyCurve plasticCreep + { + get { return _plasticCreep; } + 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); } + } + + + public override ObiActorBlueprint sourceBlueprint + { + get { return m_BoneBlueprint; } + } + + public ObiBoneBlueprint boneBlueprint + { + get { return m_BoneBlueprint; } + set + { + if (m_BoneBlueprint != value) + { + RemoveFromSolver(); + ClearState(); + m_BoneBlueprint = value; + AddToSolver(); + } + } + } + + protected override void Awake() + { + m_BoneBlueprint = ScriptableObject.CreateInstance(); + UpdateBlueprint(); + base.Awake(); + } + + protected override void OnDestroy() + { + if (m_BoneBlueprint != null) + DestroyImmediate(m_BoneBlueprint); + + base.OnDestroy(); + } + + protected override void OnValidate() + { + base.OnValidate(); + UpdateFilter(); + UpdateRadius(); + UpdateMasses(); + SetupRuntimeConstraints(); + } + + public void UpdateBlueprint() + { + if (m_BoneBlueprint != null) + { + m_BoneBlueprint.root = transform; + m_BoneBlueprint.ignored = ignored; + m_BoneBlueprint.mass = mass; + m_BoneBlueprint.rotationalMass = rotationalMass; + m_BoneBlueprint.radius = radius; + m_BoneBlueprint.GenerateImmediate(); + } + } + + public override void LoadBlueprint(ObiSolver solver) + { + base.LoadBlueprint(solver); + + // 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) + { + ResetParticles(); + CopyParticleDataToTransforms(); + base.UnloadBlueprint(solver); + } + + 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() + { + SetConstraintsDirty(Oni.ConstraintType.Skin); + SetConstraintsDirty(Oni.ConstraintType.StretchShear); + SetConstraintsDirty(Oni.ConstraintType.BendTwist); + SetConstraintsDirty(Oni.ConstraintType.Aerodynamics); + SetSelfCollisions(selfCollisions); + SetSimplicesDirty(); + UpdateFilter(); + } + + 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() + { + if (isLoaded) + { + int rootIndex = solverIndices[0]; + + var actor2Solver = actorLocalToSolverMatrix; + var actor2SolverR = actor2Solver.rotation; + + solver.invMasses[rootIndex] = 0; + solver.invRotationalMasses[rootIndex] = 0; + solver.velocities[rootIndex] = Vector4.zero; + solver.angularVelocities[rootIndex] = Vector4.zero; + + // take particle rest position in actor space (which is always zero), converts to solver space: + 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.startOrientations[rootIndex] = solver.endOrientations[rootIndex] = solver.orientations[rootIndex] = actor2SolverR * boneBlueprint.orientations[0]; + } + } + + private void UpdateFilter() + { + for (int i = 0; i < particleCount; i++) + { + boneBlueprint.filters[i] = filter; + if (isLoaded) + solver.filters[solverIndices[i]] = filter; + } + } + + public void UpdateRadius() + { + for (int i = 0; i < particleCount; ++i) + { + var normalizedCoord = boneBlueprint.normalizedLengths[i]; + var radii = Vector3.one * radius.Evaluate(normalizedCoord); + boneBlueprint.principalRadii[i] = radii; + + if (isLoaded) + solver.principalRadii[solverIndices[i]] = radii; + } + } + + public void UpdateMasses() + { + 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)); + + boneBlueprint.invMasses[i] = invMass; + boneBlueprint.invRotationalMasses[i] = invRotMass; + + if (isLoaded) + { + solver.invMasses[solverIndices[i]] = invMass; + solver.invRotationalMasses[solverIndices[i]] = invRotMass; + } + } + } + + public Vector3 GetSkinRadiiBackstop(ObiSkinConstraintsBatch batch, int constraintIndex) + { + float normalizedCoord = boneBlueprint.normalizedLengths[batch.particleIndices[constraintIndex]]; + return new Vector3(skinRadius.Evaluate(normalizedCoord), 0, 0); + } + + public float GetSkinCompliance(ObiSkinConstraintsBatch batch, int constraintIndex) + { + float normalizedCoord = boneBlueprint.normalizedLengths[batch.particleIndices[constraintIndex]]; + return skinCompliance.Evaluate(normalizedCoord); + } + + + public Vector3 GetBendTwistCompliance(ObiBendTwistConstraintsBatch batch, int constraintIndex) + { + float normalizedCoord = boneBlueprint.normalizedLengths[batch.particleIndices[constraintIndex * 2]]; + return new Vector3(bend1Compliance.Evaluate(normalizedCoord), + bend2Compliance.Evaluate(normalizedCoord), + torsionCompliance.Evaluate(normalizedCoord)); + } + + public Vector2 GetBendTwistPlasticity(ObiBendTwistConstraintsBatch batch, int constraintIndex) + { + float normalizedCoord = boneBlueprint.normalizedLengths[batch.particleIndices[constraintIndex * 2]]; + return new Vector2(plasticYield.Evaluate(normalizedCoord), + plasticCreep.Evaluate(normalizedCoord)); + } + + public Vector3 GetStretchShearCompliance(ObiStretchShearConstraintsBatch batch, int constraintIndex) + { + float normalizedCoord = boneBlueprint.normalizedLengths[batch.particleIndices[constraintIndex * 2]]; + return new Vector3(shear1Compliance.Evaluate(normalizedCoord), + shear2Compliance.Evaluate(normalizedCoord), + stretchCompliance.Evaluate(normalizedCoord)); + } + + public float GetDrag(ObiAerodynamicConstraintsBatch batch, int constraintIndex) + { + float normalizedCoord = boneBlueprint.normalizedLengths[batch.particleIndices[constraintIndex]]; + return drag.Evaluate(normalizedCoord); + } + + public float GetLift(ObiAerodynamicConstraintsBatch batch, int constraintIndex) + { + float normalizedCoord = boneBlueprint.normalizedLengths[batch.particleIndices[constraintIndex]]; + return 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(); + + UpdateRestShape(); + } + + public void LateUpdate() + { + if (Application.isPlaying && isActiveAndEnabled) + CopyParticleDataToTransforms(); + } + + /// + /// Resets particle orientations/positions to match the current pose of the bone hierarchy, and sets all their velocities to zero. + /// + public void ResetToCurrentShape() + { + if (!isLoaded) return; + + var world2Solver = solver.transform.worldToLocalMatrix; + + for (int i = 0; i < particleCount; ++i) + { + var trfm = boneBlueprint.transforms[i]; + int solverIndex = solverIndices[i]; + + solver.velocities[solverIndex] = Vector4.zero; + solver.angularVelocities[solverIndex] = Vector4.zero; + + solver.startPositions[solverIndex] = solver.endPositions[solverIndex] = solver.positions[solverIndex] = world2Solver.MultiplyPoint3x4(trfm.position); + + var boneDeltaAWS = trfm.rotation * Quaternion.Inverse(boneBlueprint.restOrientations[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() + { + if (boneBlueprint != null) + for (int i = 1; i < boneBlueprint.restTransformOrientations.Count; ++i) + boneBlueprint.transforms[i].localRotation = boneBlueprint.restTransformOrientations[i]; + } + + private void UpdateRestShape() + { + // use current bone transforms as rest state for the simulation: + var bc = GetConstraintsByType(Oni.ConstraintType.BendTwist) as ObiConstraints; + var sbc = solver.GetConstraintsByType(Oni.ConstraintType.BendTwist) as ObiConstraints; + + if (bendTwistConstraintsEnabled && bc != null && sbc != null) + { + // 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)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]; + 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]; + + 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) + { + // 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)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 (isLoaded && boneBlueprint != null) + { + // copy current particle transforms to bones: + for (int i = 1; i < particleCount; ++i) + { + var trfm = boneBlueprint.transforms[i]; + + if (stretchBones) + trfm.position = GetParticlePosition(solverIndices[i]); + + var delta = GetParticleOrientation(solverIndices[i]) * Quaternion.Inverse(boneBlueprint.root2WorldR * boneBlueprint.orientations[i]); + trfm.rotation = delta * boneBlueprint.restOrientations[i]; + } + } + } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiBone.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiBone.cs.meta new file mode 100644 index 00000000..10400fd3 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiBone.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7be315bc5964b4fbca6cf0a978ff76a1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 0a18e0376cc184a9b96ebb3bf0175cc2, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRod.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRod.cs new file mode 100644 index 00000000..59274cc6 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRod.cs @@ -0,0 +1,265 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + [AddComponentMenu("Physics/Obi/Obi Rod", 881)] + [ExecuteInEditMode] + [DisallowMultipleComponent] + public class ObiRod : ObiRopeBase, IStretchShearConstraintsUser, IBendTwistConstraintsUser, IChainConstraintsUser + { + [SerializeField] protected ObiRodBlueprint m_RodBlueprint; + + // distance constraints: + [SerializeField] protected bool _stretchShearConstraintsEnabled = true; + [SerializeField] protected float _stretchCompliance = 0; + [SerializeField] protected float _shear1Compliance = 0; + [SerializeField] protected float _shear2Compliance = 0; + + // bend constraints: + [SerializeField] protected bool _bendTwistConstraintsEnabled = true; + [SerializeField] protected float _torsionCompliance = 0; + [SerializeField] protected float _bend1Compliance = 0; + [SerializeField] protected float _bend2Compliance = 0; + [SerializeField] [Range(0, 0.1f)] protected float _plasticYield = 0; + [SerializeField] protected float _plasticCreep = 0; + + // chain constraints: + [SerializeField] protected bool _chainConstraintsEnabled = true; + [SerializeField] [Range(0, 1)] protected float _tightness = 1; + + /// + /// Whether particles in this actor colide with particles using the same phase value. + /// + public bool selfCollisions + { + get { return m_SelfCollisions; } + set { if (value != m_SelfCollisions) { m_SelfCollisions = value; SetSelfCollisions(m_SelfCollisions); } } + } + + /// + /// Whether this actor's stretch/shear constraints are enabled. + /// + public bool stretchShearConstraintsEnabled + { + get { return _stretchShearConstraintsEnabled; } + set { if (value != _stretchShearConstraintsEnabled) { _stretchShearConstraintsEnabled = value; SetConstraintsDirty(Oni.ConstraintType.StretchShear); } } + } + + /// + /// Compliance of this actor's stretch/shear constraints, along their length. + /// + public float stretchCompliance + { + get { return _stretchCompliance; } + set { _stretchCompliance = value; SetConstraintsDirty(Oni.ConstraintType.StretchShear); } + } + + /// + /// Shearing compliance of this actor's stretch/shear constraints, along the first axis orthogonal to their length. + /// + public float shear1Compliance + { + get { return _shear1Compliance; } + set { _shear1Compliance = value; SetConstraintsDirty(Oni.ConstraintType.StretchShear); } + } + + /// + /// Shearing compliance of this actor's stretch/shear constraints, along the second axis orthogonal to their length. + /// + public float shear2Compliance + { + get { return _shear2Compliance; } + set { _shear2Compliance = value; SetConstraintsDirty(Oni.ConstraintType.StretchShear); } + } + + /// + /// Whether this actor's bend/twist constraints are enabled. + /// + public bool bendTwistConstraintsEnabled + { + get { return _bendTwistConstraintsEnabled; } + set { if (value != _bendTwistConstraintsEnabled) { _bendTwistConstraintsEnabled = value; SetConstraintsDirty(Oni.ConstraintType.BendTwist); } } + } + + /// + /// Torsional compliance of this actor's bend/twist constraints along their length. + /// + public float torsionCompliance + { + get { return _torsionCompliance; } + set { _torsionCompliance = value; SetConstraintsDirty(Oni.ConstraintType.BendTwist); } + } + + /// + /// Bending compliance of this actor's bend/twist constraints along the first axis orthogonal to their length. + /// + public float bend1Compliance + { + get { return _bend1Compliance; } + set { _bend1Compliance = value; SetConstraintsDirty(Oni.ConstraintType.BendTwist); } + } + + /// + /// Bending compliance of this actor's bend/twist constraints along the second axis orthogonal to their length. + /// + public float bend2Compliance + { + get { return _bend2Compliance; } + set { _bend2Compliance = value; 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 float plasticYield + { + get { return _plasticYield; } + set { _plasticYield = value; SetConstraintsDirty(Oni.ConstraintType.BendTwist); } + } + + /// + /// Percentage of deformation that gets absorbed into the rest shape per second, once deformation goes above the threshold. + /// + public float plasticCreep + { + get { return _plasticCreep; } + set { _plasticCreep = value; SetConstraintsDirty(Oni.ConstraintType.BendTwist); } + } + + /// + /// Whether this actor's chain constraints are enabled. + /// + public bool chainConstraintsEnabled + { + get { return _chainConstraintsEnabled; } + set { if (value != _chainConstraintsEnabled) { _chainConstraintsEnabled = value; SetConstraintsDirty(Oni.ConstraintType.BendTwist); } } + } + + /// + /// Tightness of this actor's chain constraints. + /// + /// Controls how much chain constraints are allowed to compress. + public float tightness + { + get { return _tightness; } + set { _tightness = value; SetConstraintsDirty(Oni.ConstraintType.Chain); } + } + + /// + /// Average distance between consecutive particle centers in this rod. + /// + public float interParticleDistance + { + get { return m_RodBlueprint.interParticleDistance; } + } + + public override ObiActorBlueprint sourceBlueprint + { + get { return m_RodBlueprint; } + } + + public ObiRodBlueprint rodBlueprint + { + get { return m_RodBlueprint; } + set + { + if (m_RodBlueprint != value) + { + RemoveFromSolver(); + ClearState(); + m_RodBlueprint = value; + AddToSolver(); + } + } + } + + protected override void OnValidate() + { + base.OnValidate(); + SetConstraintsDirty(Oni.ConstraintType.BendTwist); + SetupRuntimeConstraints(); + } + + public override void LoadBlueprint(ObiSolver solver) + { + base.LoadBlueprint(solver); + 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.Chain); + SetConstraintsDirty(Oni.ConstraintType.Aerodynamics); + SetSelfCollisions(selfCollisions); + RecalculateRestLength(); + SetSimplicesDirty(); + } + + public Vector3 GetBendTwistCompliance(ObiBendTwistConstraintsBatch batch, int constraintIndex) + { + return new Vector3(bend1Compliance, bend2Compliance, torsionCompliance); + } + + public Vector2 GetBendTwistPlasticity(ObiBendTwistConstraintsBatch batch, int constraintIndex) + { + return new Vector2(plasticYield, plasticCreep); + } + + public Vector3 GetStretchShearCompliance(ObiStretchShearConstraintsBatch batch, int constraintIndex) + { + return new Vector3(shear1Compliance, shear2Compliance, stretchCompliance); + } + + protected override void RebuildElementsFromConstraintsInternal() + { + var dc = GetConstraintsByType(Oni.ConstraintType.StretchShear) as ObiConstraints; + if (dc == null || dc.batchCount < 2) + return; + + int constraintCount = dc.batches[0].activeConstraintCount + dc.batches[1].activeConstraintCount; + + elements = new List(constraintCount); + + for (int i = 0; i < constraintCount; ++i) + { + var batch = dc.batches[i % 2] as ObiStretchShearConstraintsBatch; + int constraintIndex = i / 2; + + var e = new ObiStructuralElement(); + e.particle1 = solverIndices[batch.particleIndices[constraintIndex * 2]]; + e.particle2 = solverIndices[batch.particleIndices[constraintIndex * 2 + 1]]; + e.restLength = batch.restLengths[constraintIndex]; + elements.Add(e); + } + + if (dc.batches.Count > 2) + { + var batch = dc.batches[2]; + var e = new ObiStructuralElement(); + e.particle1 = solverIndices[batch.particleIndices[0]]; + e.particle2 = solverIndices[batch.particleIndices[1]]; + e.restLength = batch.restLengths[0]; + elements.Add(e); + } + } + + } +} diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRod.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRod.cs.meta new file mode 100644 index 00000000..4a9bd492 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRod.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f2bc32c4faf04f039a86a6e3cea12a1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 7125c3eebd3cc4f86aac51cca3ee1592, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRope.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRope.cs new file mode 100644 index 00000000..93e82a58 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRope.cs @@ -0,0 +1,468 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + [AddComponentMenu("Physics/Obi/Obi Rope", 880)] + [ExecuteInEditMode] + [DisallowMultipleComponent] + public class ObiRope : ObiRopeBase, IDistanceConstraintsUser, IBendConstraintsUser + { + [SerializeField] protected ObiRopeBlueprint m_RopeBlueprint; + private ObiRopeBlueprint m_RopeBlueprintInstance; + + // rope has a list of structural elements. + // each structural element is equivalent to 1 distance constraint and 2 bend constraints (with previous, and following element). + // a structural element has force and rest length. + // a function re-generates constraints from structural elements when needed, placing them in the appropiate batches. + + public bool tearingEnabled = false; + public float tearResistanceMultiplier = 1000; /**< Factor that controls how much a structural cloth spring can stretch before breaking.*/ + public int tearRate = 1; + + // distance constraints: + [SerializeField] protected bool _distanceConstraintsEnabled = true; + [SerializeField] protected float _stretchingScale = 1; + [SerializeField] protected float _stretchCompliance = 0; + [SerializeField] [Range(0, 1)] protected float _maxCompression = 0; + + // bend constraints: + [SerializeField] protected bool _bendConstraintsEnabled = true; + [SerializeField] protected float _bendCompliance = 0; + [SerializeField] [Range(0, 0.5f)] protected float _maxBending = 0.025f; + [SerializeField] [Range(0, 0.1f)] protected float _plasticYield = 0; + [SerializeField] protected float _plasticCreep = 0; + + List tornElements = new List(); + + /// + /// Whether particles in this actor colide with particles using the same phase value. + /// + public bool selfCollisions + { + get { return m_SelfCollisions; } + set { if (value != m_SelfCollisions) { m_SelfCollisions = value; SetSelfCollisions(selfCollisions); } } + } + + /// + /// Whether this actor's distance constraints are enabled. + /// + public bool distanceConstraintsEnabled + { + get { return _distanceConstraintsEnabled; } + set { if (value != _distanceConstraintsEnabled) { _distanceConstraintsEnabled = value; SetConstraintsDirty(Oni.ConstraintType.Distance); } } + } + + /// + /// Scale value for this actor's distance constraints rest length. + /// + /// The default is 1. For instamce, a value of 2 will make the distance constraints twice as long, 0.5 will reduce their length in half. + public float stretchingScale + { + get { return _stretchingScale; } + set { _stretchingScale = value; SetConstraintsDirty(Oni.ConstraintType.Distance); } + } + + /// + /// Compliance of this actor's stretch constraints. + /// + public float stretchCompliance + { + get { return _stretchCompliance; } + set { _stretchCompliance = value; SetConstraintsDirty(Oni.ConstraintType.Distance); } + } + + /// + /// Maximum compression this actor's distance constraints can undergo. + /// + /// This is expressed as a percentage of the scaled rest length. + public float maxCompression + { + get { return _maxCompression; } + set { _maxCompression = value; SetConstraintsDirty(Oni.ConstraintType.Distance); } + } + + /// + /// Whether this actor's bend constraints are enabled. + /// + public bool bendConstraintsEnabled + { + get { return _bendConstraintsEnabled; } + set { if (value != _bendConstraintsEnabled) { _bendConstraintsEnabled = value; SetConstraintsDirty(Oni.ConstraintType.Bending); } } + } + + /// + /// Compliance of this actor's bend constraints. + /// + public float bendCompliance + { + get { return _bendCompliance; } + set { _bendCompliance = value; SetConstraintsDirty(Oni.ConstraintType.Bending); } + } + + /// + /// Max bending value that constraints can undergo before resisting bending. + /// + public float maxBending + { + get { return _maxBending; } + set { _maxBending = value; SetConstraintsDirty(Oni.ConstraintType.Bending); } + } + + /// + /// Threshold for plastic behavior. + /// + /// Once bending goes above this value, a percentage of the deformation (determined by ) will be permanently absorbed into the rope's rest shape. + public float plasticYield + { + get { return _plasticYield; } + set { _plasticYield = value; SetConstraintsDirty(Oni.ConstraintType.Bending); } + } + + /// + /// Percentage of deformation that gets absorbed into the rest shape per second, once deformation goes above the threshold. + /// + public float plasticCreep + { + get { return _plasticCreep; } + set { _plasticCreep = value; SetConstraintsDirty(Oni.ConstraintType.Bending); } + } + + /// + /// Average distance between consecutive particle centers in this rope. + /// + public float interParticleDistance + { + get { return m_RopeBlueprint.interParticleDistance; } + } + + public override ObiActorBlueprint sourceBlueprint + { + get { return m_RopeBlueprint; } + } + + public ObiRopeBlueprint ropeBlueprint + { + get { return m_RopeBlueprint; } + set + { + if (m_RopeBlueprint != value) + { + RemoveFromSolver(); + ClearState(); + m_RopeBlueprint = value; + AddToSolver(); + } + } + } + + public delegate void RopeTornCallback(ObiRope rope, ObiRopeTornEventArgs tearInfo); + public event RopeTornCallback OnRopeTorn; /**< Called when a constraint is torn.*/ + + public class ObiRopeTornEventArgs + { + public ObiStructuralElement element; /**< info about the element being torn.*/ + public int particleIndex; /**< index of the particle being torn*/ + + public ObiRopeTornEventArgs(ObiStructuralElement element, int particle) + { + this.element = element; + this.particleIndex = particle; + } + } + + protected override void OnValidate() + { + base.OnValidate(); + SetupRuntimeConstraints(); + } + + public override void LoadBlueprint(ObiSolver solver) + { + // create a copy of the blueprint for this cloth: + if (Application.isPlaying) + m_RopeBlueprintInstance = this.blueprint as ObiRopeBlueprint; + + base.LoadBlueprint(solver); + RebuildElementsFromConstraints(); + SetupRuntimeConstraints(); + } + + public override void UnloadBlueprint(ObiSolver solver) + { + base.UnloadBlueprint(solver); + + // delete the blueprint instance: + if (m_RopeBlueprintInstance != null) + DestroyImmediate(m_RopeBlueprintInstance); + } + + private void SetupRuntimeConstraints() + { + SetConstraintsDirty(Oni.ConstraintType.Distance); + SetConstraintsDirty(Oni.ConstraintType.Bending); + SetConstraintsDirty(Oni.ConstraintType.Aerodynamics); + SetSelfCollisions(selfCollisions); + RecalculateRestLength(); + SetSimplicesDirty(); + } + + // 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.SimulationStart(timeToSimulate, substepTime); + + if (isActiveAndEnabled && tearingEnabled) + ApplyTearing(substepTime); + } + + protected void ApplyTearing(float substepTime) + { + + float sqrTime = substepTime * substepTime; + + tornElements.Clear(); + + var dc = GetConstraintsByType(Oni.ConstraintType.Distance) as ObiConstraints; + var sc = this.solver.GetConstraintsByType(Oni.ConstraintType.Distance) as ObiConstraints; + + if (dc != null && sc != null) + { + // 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) + { + var batch = dc.GetBatch(j) as ObiDistanceConstraintsBatch; + var solverBatch = sc.batches[j] as ObiDistanceConstraintsBatch; + + for (int i = 0; i < batch.activeConstraintCount; i++) + { + 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]); + } + } + } + } + + if (tornElements.Count > 0) + { + + // sort edges by force: + tornElements.Sort(delegate (ObiStructuralElement x, ObiStructuralElement y) + { + return x.constraintForce.CompareTo(y.constraintForce); + }); + + int tornCount = 0; + for (int i = 0; i < tornElements.Count; i++) + { + if (Tear(tornElements[i])) + tornCount++; + if (tornCount >= tearRate) + break; + } + + if (tornCount > 0) + RebuildConstraintsFromElements(); + } + + } + + private int SplitParticle(int splitIndex) + { + // halve the original particle's mass: + m_Solver.invMasses[splitIndex] *= 2; + + CopyParticle(solver.particleToActor[splitIndex].indexInActor, activeParticleCount); + ActivateParticle(); + SetRenderingDirty(Oni.RenderingSystemType.AllRopes); + + return solverIndices[activeParticleCount - 1]; + } + + + /// + /// Tears any given rope element. After calling Tear() one or multiple times, a call to RebuildConstraintsFromElements is needed to + /// update the rope particle/constraint representation. + /// + public bool Tear(ObiStructuralElement element) + { + // don't allow splitting if there are no free particles left in the pool. + if (activeParticleCount >= m_RopeBlueprint.particleCount) + return false; + + // Cannot split fixed particles: + if (m_Solver.invMasses[element.particle1] == 0) + return false; + + // Or particles that have been already split. + int index = elements.IndexOf(element); + if (index > 0 && elements[index - 1].particle2 != element.particle1) + return false; + + element.particle1 = SplitParticle(element.particle1); + + if (OnRopeTorn != null) + OnRopeTorn(this, new ObiRopeTornEventArgs(element, element.particle1)); + + return true; + } + + protected override void RebuildElementsFromConstraintsInternal() + { + var dc = GetConstraintsByType(Oni.ConstraintType.Distance) as ObiConstraints; + if (dc == null || dc.batchCount < 2) + return; + + int constraintCount = dc.batches[0].activeConstraintCount + dc.batches[1].activeConstraintCount; + + elements = new List(constraintCount); + + for (int i = 0; i < constraintCount; ++i) + { + var batch = dc.batches[i % 2] as ObiDistanceConstraintsBatch; + int constraintIndex = i / 2; + + var e = new ObiStructuralElement(); + e.particle1 = solverIndices[batch.particleIndices[constraintIndex * 2]]; + e.particle2 = solverIndices[batch.particleIndices[constraintIndex * 2 + 1]]; + e.restLength = batch.restLengths[constraintIndex]; + e.tearResistance = 1; + elements.Add(e); + } + + // loop-closing element: + if (dc.batches.Count > 2) + { + var batch = dc.batches[2]; + var e = new ObiStructuralElement(); + e.particle1 = solverIndices[batch.particleIndices[0]]; + e.particle2 = solverIndices[batch.particleIndices[1]]; + e.restLength = batch.restLengths[0]; + e.tearResistance = 1; + elements.Add(e); + } + } + + public override void RebuildConstraintsFromElements() + { + // 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; + + db.particleIndices[constraint * 2] = solver.particleToActor[elements[i].particle1].indexInActor; + db.particleIndices[constraint * 2 + 1] = solver.particleToActor[elements[i].particle2].indexInActor; + db.restLengths[constraint] = elements[i].restLength; + 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; + + // create bend constraint only if there's continuity between elements: + if (elements[i].particle2 == elements[i + 1].particle1) + { + constraint = bb.activeConstraintCount; + + int indexA = elements[i].particle1; + int indexB = elements[i + 1].particle2; + int indexC = elements[i].particle2; + 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; + bb.particleIndices[constraint * 3 + 2] = solver.particleToActor[indexC].indexInActor; + bb.restBends[constraint] = restBend; + bb.bendingStiffnesses[constraint] = new Vector2(_maxBending, _bendCompliance); + bb.ActivateConstraint(constraint); + } + } + } + + // loop-closing constraints: + if (dc.batches.Count > 2) + { + var loopClosingBatch = dc.batches[2]; + var lastElement = elements[elements.Count - 1]; + loopClosingBatch.particleIndices[0] = solver.particleToActor[lastElement.particle1].indexInActor; + loopClosingBatch.particleIndices[1] = solver.particleToActor[lastElement.particle2].indexInActor; + loopClosingBatch.restLengths[0] = lastElement.restLength; + loopClosingBatch.stiffnesses[0] = new Vector2(_stretchCompliance, _maxCompression * loopClosingBatch.restLengths[0]); + loopClosingBatch.ActivateConstraint(0); + } + + if (bc.batches.Count > 4 && elements.Count > 2) + { + var loopClosingBatch = bc.batches[3]; + var lastElement = elements[elements.Count - 2]; + + // for loop constraints, 0 is our best approximation of rest bend: + loopClosingBatch.particleIndices[0] = solver.particleToActor[lastElement.particle1].indexInActor; + loopClosingBatch.particleIndices[1] = solver.particleToActor[elements[0].particle1].indexInActor; + loopClosingBatch.particleIndices[2] = solver.particleToActor[lastElement.particle2].indexInActor; + loopClosingBatch.restBends[0] = 0; + loopClosingBatch.bendingStiffnesses[0] = new Vector2(_maxBending, _bendCompliance); + loopClosingBatch.ActivateConstraint(0); + + loopClosingBatch = bc.batches[4]; + loopClosingBatch.particleIndices[0] = solver.particleToActor[lastElement.particle2].indexInActor; + loopClosingBatch.particleIndices[1] = solver.particleToActor[elements[0].particle2].indexInActor; + loopClosingBatch.particleIndices[2] = solver.particleToActor[elements[0].particle1].indexInActor; + loopClosingBatch.restBends[0] = 0; + loopClosingBatch.bendingStiffnesses[0] = new Vector2(_maxBending, _bendCompliance); + loopClosingBatch.ActivateConstraint(0); + } + + // 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) + { + 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/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRope.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRope.cs.meta new file mode 100644 index 00000000..98869883 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRope.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 61104f33a3f344db9b7e0d0cda41a9fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 7a860725829a34375a627c13703f0798, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeBase.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeBase.cs new file mode 100644 index 00000000..41313bd3 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeBase.cs @@ -0,0 +1,163 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + public abstract class ObiRopeBase : ObiActor, IAerodynamicConstraintsUser + { + + [SerializeField] protected bool m_SelfCollisions = false; + [HideInInspector] [SerializeField] protected float restLength_ = 0; + [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 { + var ropeBlueprint = (sourceBlueprint as ObiRopeBlueprintBase); + return ropeBlueprint != null ? ropeBlueprint.path : null; + } + } + + public float GetDrag(ObiAerodynamicConstraintsBatch batch, int constraintIndex) + { + return drag; + } + + public float GetLift(ObiAerodynamicConstraintsBatch batch, int constraintIndex) + { + return lift; + } + + public override void ProvideDeformableEdges(ObiNativeIntList deformableEdges) + { + 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]]); + } + } + + /// + /// Calculates and returns current rope length, including stretching/compression. + /// + public float CalculateLength() + { + float length = 0; + + if (isLoaded) + { + // Iterate trough all distance constraints in order: + int elementCount = elements.Count; + for (int i = 0; i < elementCount; ++i) + length += Vector4.Distance(solver.positions[elements[i].particle1], solver.positions[elements[i].particle2]); + } + return length; + } + + /// + /// Recalculates the rope's rest length, that is, its length as specified by the blueprint. + /// + public void RecalculateRestLength() + { + restLength_ = 0; + + // Iterate trough all distance elements and accumulate their rest lengths. + int elementCount = elements.Count; + for (int i = 0; i < elementCount; ++i) + restLength_ += elements[i].restLength; + } + + /// + /// Recalculates all particle rest positions, used when filtering self-collisions. + /// + public void RecalculateRestPositions() + { + float pos = 0; + int elementCount = elements.Count; + for (int i = 0; i < elementCount; ++i) + { + solver.restPositions[elements[i].particle1] = new Vector4(pos, 0, 0, 1); + pos += elements[i].restLength; + solver.restPositions[elements[i].particle2] = new Vector4(pos, 0, 0, 1); + } + } + + /// + /// Regenerates all rope elements using constraints. It's the opposite of RebuildConstraintsFromElements(). This is automatically called when loading a blueprint, but should also be called when manually + /// altering rope constraints (adding/removing/updating constraints and/or batches). + /// + public void RebuildElementsFromConstraints() + { + RebuildElementsFromConstraintsInternal(); + if (OnElementsGenerated != null) + OnElementsGenerated(this); + } + + protected abstract void RebuildElementsFromConstraintsInternal(); + + /// + /// Regenerates all rope constraints using rope elements. It's the opposite of RebuildElementsFromConstraints().This should be called anytime the element representation of the rope + /// is changed (adding/removing/updating elements). This is usually the case after tearing the rope or changing its length using a cursor. + /// + public virtual void RebuildConstraintsFromElements() { } + + + /// + /// Returns a rope element that contains a length-normalized coordinate. It will also return the length-normalized coordinate within the element. + /// + public ObiStructuralElement GetElementAt(float mu, out float elementMu) + { + float edgeMu = elements.Count * Mathf.Clamp(mu, 0, 0.99999f); + + int index = (int)edgeMu; + elementMu = edgeMu - index; + + if (elements != null && index < elements.Count) + return elements[index]; + return null; + } + + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeBase.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeBase.cs.meta new file mode 100644 index 00000000..ee811401 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ab4d6f4281d1c4331b6bacd307c61a95 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeCursor.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeCursor.cs new file mode 100644 index 00000000..998a230d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeCursor.cs @@ -0,0 +1,284 @@ +using UnityEngine; +using System.Collections; + + +namespace Obi +{ + [AddComponentMenu("Physics/Obi/Obi Rope Cursor", 883)] + [RequireComponent(typeof(ObiRope))] + public class ObiRopeCursor : MonoBehaviour + { + ObiRope rope; + + [Range(0, 1)] + [HideInInspector] [SerializeField] private float m_CursorMu; + + [Range(0, 1)] + [HideInInspector] [SerializeField] private float m_SourceMu; + + public bool direction = true; + + ObiStructuralElement m_CursorElement = null; + private int m_SourceIndex = -1; + private float lengthChange = 0; + + public float cursorMu + { + set + { + m_CursorMu = value; + UpdateCursor(); + } + get { return m_CursorMu; } + } + + public float sourceMu + { + set + { + m_SourceMu = value; + UpdateSource(); + } + get { return m_SourceMu; } + } + + public ObiStructuralElement cursorElement + { + get + { + if (m_CursorElement == null) + UpdateCursor(); + return m_CursorElement; + } + } + + public int sourceParticleIndex + { + get + { + if (m_SourceIndex < 0) + UpdateSource(); + return m_SourceIndex; + } + } + + private void OnEnable() + { + rope = GetComponent(); + + rope.OnElementsGenerated += Actor_OnElementsGenerated; + rope.OnSimulationStart += Rope_OnSimulate; + if (rope.elements != null && rope.elements.Count > 0) + Actor_OnElementsGenerated(rope); + } + + private void OnDisable() + { + rope.OnElementsGenerated -= Actor_OnElementsGenerated; + rope.OnSimulationStart -= Rope_OnSimulate; + } + + private void Actor_OnElementsGenerated(ObiActor actor) + { + UpdateCursor(); + UpdateSource(); + } + + private void Rope_OnSimulate(ObiActor actor, float simulatedTime, float substepTime) + { + if (!rope.isLoaded || Mathf.Abs(lengthChange) < 0.00001f) + return; + + var solver = rope.solver; + + // remove: + if (lengthChange < 0) + { + lengthChange = -lengthChange; + + while (lengthChange > m_CursorElement.restLength) + { + lengthChange -= m_CursorElement.restLength; + + int index = rope.elements.IndexOf(m_CursorElement); + + if (index >= 0) + { + // positive direction: + if (direction) + { + if (index < rope.elements.Count) + { + RemoveParticleAt(solver.particleToActor[m_CursorElement.particle2].indexInActor); + rope.elements.RemoveAt(index); + + if (rope.elements[index].particle1 == m_CursorElement.particle2) + rope.elements[index].particle1 = m_CursorElement.particle1; + + m_CursorElement = rope.elements[index]; + } + else + m_CursorElement = rope.elements[Mathf.Max(0, index - 1)]; + } + else // negative direction: + { + if (index > 0) + { + RemoveParticleAt(solver.particleToActor[m_CursorElement.particle1].indexInActor); + rope.elements.RemoveAt(index); + + if (rope.elements[index - 1].particle2 == m_CursorElement.particle1) + rope.elements[index - 1].particle2 = m_CursorElement.particle2; + m_CursorElement = rope.elements[index - 1]; + } + else + m_CursorElement = rope.elements[0]; + } + } + } + + // the remaining length is subtracted from the current constraint: + if (lengthChange > 0) + m_CursorElement.restLength = Mathf.Max(0, m_CursorElement.restLength - lengthChange); + + } + // add + else + { + float lengthDelta = Mathf.Min(lengthChange, Mathf.Max(0, rope.ropeBlueprint.interParticleDistance - m_CursorElement.restLength)); + + // extend the current element, if possible: + if (lengthDelta > 0) + { + m_CursorElement.restLength += lengthDelta; + lengthChange -= lengthDelta; + } + + // once the current element has been extended, see if we must add new elements, if there's enough particles left: + while (rope.activeParticleCount < rope.sourceBlueprint.particleCount && + m_CursorElement.restLength + lengthChange > rope.ropeBlueprint.interParticleDistance) + { + // calculate added length: + lengthDelta = Mathf.Min(lengthChange, rope.ropeBlueprint.interParticleDistance); + lengthChange -= lengthDelta; + + if (direction) + { + // add new particle: + int newParticleSolverIndex = AddParticleAt(solver.particleToActor[m_CursorElement.particle1].indexInActor); + + // set position of the new particle: + solver.positions[newParticleSolverIndex] = solver.positions[m_CursorElement.particle1] + + (solver.positions[m_CursorElement.particle2] - solver.positions[m_CursorElement.particle1]) * lengthDelta; + + // insert a new element: + ObiStructuralElement newElement = new ObiStructuralElement(); + newElement.restLength = lengthDelta; + newElement.particle1 = m_CursorElement.particle1; + newElement.particle2 = newParticleSolverIndex; + m_CursorElement.particle1 = newParticleSolverIndex; + int index = rope.elements.IndexOf(m_CursorElement); + rope.elements.Insert(index, newElement); + + m_CursorElement = newElement; + } + else + { + // add new particle: + int newParticleSolverIndex = AddParticleAt(solver.particleToActor[m_CursorElement.particle2].indexInActor); + + // set position of the new particle: + solver.positions[newParticleSolverIndex] = solver.positions[m_CursorElement.particle2] + + (solver.positions[m_CursorElement.particle1] - solver.positions[m_CursorElement.particle2]) * lengthDelta; + + // insert a new element: + ObiStructuralElement newElement = new ObiStructuralElement(); + newElement.restLength = lengthDelta; + newElement.particle1 = newParticleSolverIndex; + newElement.particle2 = m_CursorElement.particle2; + m_CursorElement.particle2 = newParticleSolverIndex; + int index = rope.elements.IndexOf(m_CursorElement); + rope.elements.Insert(index + 1, newElement); + + m_CursorElement = newElement; + } + } + + // the remaining length is added to the current constraint: + if (lengthChange > 0) + m_CursorElement.restLength += lengthChange; + + } + + // recalculate rest positions and length prior to constraints (bend constraints need rest positions): + rope.RecalculateRestPositions(); + rope.RecalculateRestLength(); + + // 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/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeCursor.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeCursor.cs.meta new file mode 100644 index 00000000..5656f220 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeCursor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8285ac97113f74d449053378d0e3a56b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 618cf36eb21e34118ac5697fe77e2c3e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints.meta new file mode 100644 index 00000000..7ac71eb2 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: acf7eb82de1d147128faa88b9cdb70d3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiBoneBlueprint.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiBoneBlueprint.cs new file mode 100644 index 00000000..ebd52135 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiBoneBlueprint.cs @@ -0,0 +1,348 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Obi +{ + + [CreateAssetMenu(fileName = "bone blueprint", menuName = "Obi/Bone Blueprint", order = 142)] + public class ObiBoneBlueprint : ObiActorBlueprint + { + public Transform root; + + public const float DEFAULT_PARTICLE_MASS = 0.1f; + public const float DEFAULT_PARTICLE_ROTATIONAL_MASS = 0.1f; + public const float DEFAULT_PARTICLE_RADIUS = 0.05f; + + [HideInInspector] public List transforms = new List(); + [HideInInspector] public List restTransformOrientations = new List(); + [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; + [HideInInspector] [NonSerialized] public ObiBone.BonePropertyCurve radius; + + public Quaternion root2WorldR; + + private GraphColoring colorizer; + + private ObiBone.IgnoredBone GetIgnoredBone(Transform bone) + { + for (int i = 0; i < ignored.Count; ++i) + if (ignored[i].bone == bone) + return ignored[i]; + + return null; + } + + protected override IEnumerator Initialize() + { + ClearParticleGroups(); + + transforms.Clear(); + restTransformOrientations.Clear(); + parentIndices.Clear(); + normalizedLengths.Clear(); + + List particlePositions = new List(); + List particleOrientations = new List(); + + var world2Root = root.transform.worldToLocalMatrix; + var world2RootR = world2Root.rotation; + root2WorldR = Quaternion.Inverse(world2RootR); + + // create a queue to traverse the hierarchy in a width-first fashion. + Queue bones = new Queue(); + + // insert the root bone: + bones.Enqueue(root); + parentIndices.Add(-1); + normalizedLengths.Add(0); + + // initialize hierarchy length: + float maxLength = 0; + + while (bones.Count > 0) + { + var bone = bones.Dequeue(); + + if (bone != null) + { + var ig = GetIgnoredBone(bone); + + if (ig == null) + { + transforms.Add(bone); + restTransformOrientations.Add(bone.localRotation); + particlePositions.Add(world2Root.MultiplyPoint3x4(bone.position)); + particleOrientations.Add(world2RootR * bone.rotation); + } + + if (ig == null || !ig.ignoreChildren) + { + foreach (Transform child in bone) + { + ig = GetIgnoredBone(child); + + if (ig == null) + { + int parentIndex = transforms.Count - 1; + parentIndices.Add(parentIndex); + + float distanceToParent = Vector3.Distance(child.position, bone.position); + float distanceToRoot = normalizedLengths[parentIndex] + distanceToParent; + maxLength = Mathf.Max(maxLength, distanceToRoot); + normalizedLengths.Add(distanceToRoot); + } + + bones.Enqueue(child); + } + } + } + + } + + // normalize lengths: + if (maxLength > 0) + { + for (int i = 0; i < normalizedLengths.Count; ++i) + normalizedLengths[i] /= maxLength; + } + + + // calculate orientations that minimize the Darboux vector: + Vector3[] avgChildrenDirection = new Vector3[parentIndices.Count]; + int[] childCount = new int[parentIndices.Count]; + + for (int i = 0; i < parentIndices.Count; ++i) + { + int parent = parentIndices[i]; + if (parent >= 0) + { + var vector = particlePositions[i] - particlePositions[parent]; + avgChildrenDirection[parent] += vector; + childCount[parent]++; + } + } + + for (int i = 0; i < parentIndices.Count; ++i) + { + if (childCount[i] > 0) + particleOrientations[i] = Quaternion.LookRotation(avgChildrenDirection[i] / childCount[i]); + else if (parentIndices[i] >= 0) + particleOrientations[i] = particleOrientations[parentIndices[i]]; + } + + + m_ActiveParticleCount = particlePositions.Count; + + positions = new Vector3[m_ActiveParticleCount]; + orientations = new Quaternion[m_ActiveParticleCount]; + velocities = new Vector3[m_ActiveParticleCount]; + angularVelocities = new Vector3[m_ActiveParticleCount]; + invMasses = new float[m_ActiveParticleCount]; + invRotationalMasses = new float[m_ActiveParticleCount]; + principalRadii = new Vector3[m_ActiveParticleCount]; + filters = new int[m_ActiveParticleCount]; + restPositions = new Vector4[m_ActiveParticleCount]; + restOrientations = new Quaternion[m_ActiveParticleCount]; + colors = new Color[m_ActiveParticleCount]; + + for (int i = 0; i < m_ActiveParticleCount; i++) + { + invMasses[i] = ObiUtils.MassToInvMass(mass != null ? mass.Evaluate(normalizedLengths[i]) : DEFAULT_PARTICLE_MASS); + invRotationalMasses[i] = ObiUtils.MassToInvMass(rotationalMass != null ? rotationalMass.Evaluate(normalizedLengths[i]) : DEFAULT_PARTICLE_ROTATIONAL_MASS); + positions[i] = particlePositions[i]; + restPositions[i] = positions[i]; + restPositions[i][3] = 1; // activate rest position. + orientations[i] = particleOrientations[i]; + restOrientations[i] = /*world2RootR */ transforms[i].rotation; + principalRadii[i] = Vector3.one * (radius != null ? radius.Evaluate(normalizedLengths[i]) : DEFAULT_PARTICLE_RADIUS); + filters[i] = ObiUtils.MakeFilter(ObiUtils.CollideWithEverything, 0); + colors[i] = Color.white; + + 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(); + + // Create stretch constraints: + IEnumerator dc = CreateStretchShearConstraints(particlePositions); + while (dc.MoveNext()) yield return dc.Current; + + // Create bending constraints: + IEnumerator bc = CreateBendTwistConstraints(particlePositions); + while (bc.MoveNext()) yield return bc.Current; + + // Create skin constraints: + 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]; + for (int i = 0; i < parentIndices.Count-1; ++i) + { + edges[i * 2] = i + 1; + edges[i * 2 + 1] = parentIndices[i + 1]; + } + } + + 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) + { + int parent = parentIndices[i]; + if (parent >= 0) + { + colorizer.AddConstraint(new[] { parent, i }); + } + } + + stretchShearConstraintsData = new ObiStretchShearConstraintsData(); + + List constraintColors = new List(); + var colorize = colorizer.Colorize("ObiBone: coloring stretch/shear constraints...", constraintColors); + while (colorize.MoveNext()) + yield return colorize.Current; + + var particleIndices = colorizer.particleIndices; + var constraintIndices = colorizer.constraintIndices; + + for (int i = 0; i < constraintColors.Count; ++i) + { + int color = constraintColors[i]; + int cIndex = constraintIndices[i]; + + // Add a new batch if needed: + if (color >= stretchShearConstraintsData.batchCount) + stretchShearConstraintsData.AddBatch(new ObiStretchShearConstraintsBatch()); + + int index1 = particleIndices[cIndex]; + int index2 = particleIndices[cIndex + 1]; + + var vector = particlePositions[index2] - particlePositions[index1]; + var rest = Quaternion.LookRotation(Quaternion.Inverse(orientations[index1]) * vector); + + stretchShearConstraintsData.batches[color].AddConstraint(new Vector2Int(index1, index2), index1, vector.magnitude, rest); + stretchShearConstraintsData.batches[color].activeConstraintCount++; + + if (i % 500 == 0) + yield return new CoroutineJob.ProgressInfo("ObiBone: generating stretch constraints...", i / constraintColors.Count); + } + } + + protected virtual IEnumerator CreateBendTwistConstraints(List particlePositions) + { + colorizer.Clear(); + + for (int i = 1; i < particlePositions.Count; ++i) + { + int parent = parentIndices[i]; + if (parent >= 0) + { + colorizer.AddConstraint(new[] { parent, i }); + } + } + + bendTwistConstraintsData = new ObiBendTwistConstraintsData(); + + List constraintColors = new List(); + var colorize = colorizer.Colorize("ObiBone: colorizing bend/twist constraints...", constraintColors); + while (colorize.MoveNext()) + yield return colorize.Current; + + var particleIndices = colorizer.particleIndices; + var constraintIndices = colorizer.constraintIndices; + + for (int i = 0; i < constraintColors.Count; ++i) + { + int color = constraintColors[i]; + int cIndex = constraintIndices[i]; + + // Add a new batch if needed: + if (color >= bendTwistConstraintsData.batchCount) + bendTwistConstraintsData.AddBatch(new ObiBendTwistConstraintsBatch()); + + int index1 = particleIndices[cIndex]; + int index2 = particleIndices[cIndex + 1]; + + Quaternion darboux = ObiUtils.RestDarboux(orientations[index1], orientations[index2]); + bendTwistConstraintsData.batches[color].AddConstraint(new Vector2Int(index1, index2), darboux); + bendTwistConstraintsData.batches[color].activeConstraintCount++; + + if (i % 500 == 0) + yield return new CoroutineJob.ProgressInfo("ObiBone: generating bend constraints...", i / constraintColors.Count); + } + } + + protected virtual IEnumerator CreateSkinConstraints(List particlePositions) + { + skinConstraintsData = new ObiSkinConstraintsData(); + ObiSkinConstraintsBatch skinBatch = new ObiSkinConstraintsBatch(); + skinConstraintsData.AddBatch(skinBatch); + + for (int i = 0; i < particlePositions.Count; ++i) + { + skinBatch.AddConstraint(i, particlePositions[i], Vector3.up, 0, 0, 0, 0); + skinBatch.activeConstraintCount++; + + if (i % 500 == 0) + yield return new CoroutineJob.ProgressInfo("ObiCloth: generating skin constraints...", i / (float)particlePositions.Count); + } + } + + } +} diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiBoneBlueprint.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiBoneBlueprint.cs.meta new file mode 100644 index 00000000..cf880472 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiBoneBlueprint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1df6a43b2a0884e8da322992da465f32 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: d0123218ec6144d0983c099fc7339924, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRodBlueprint.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRodBlueprint.cs new file mode 100644 index 00000000..e17ce9c1 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRodBlueprint.cs @@ -0,0 +1,288 @@ +using System.Collections; +using System.Collections.ObjectModel; +using System.Collections.Generic; +using UnityEngine; +using System; + +namespace Obi +{ + + [CreateAssetMenu(fileName = "rod blueprint", menuName = "Obi/Rod Blueprint", order = 141)] + public class ObiRodBlueprint : ObiRopeBlueprintBase + { + + public bool keepInitialShape = true; + + public const float DEFAULT_PARTICLE_MASS = 0.1f; + public const float DEFAULT_PARTICLE_ROTATIONAL_MASS = 0.01f; + + + protected override IEnumerator Initialize() + { + + if (path.ControlPointCount < 2) + { + ClearParticleGroups(); + path.InsertControlPoint(0, Vector3.left, Vector3.left * 0.25f, Vector3.right * 0.25f, Vector3.up, DEFAULT_PARTICLE_MASS, DEFAULT_PARTICLE_ROTATIONAL_MASS, 1, ObiUtils.MakeFilter(ObiUtils.CollideWithEverything, 1), Color.white, "control point"); + path.InsertControlPoint(1, Vector3.right, Vector3.left * 0.25f, Vector3.right * 0.25f, Vector3.up, DEFAULT_PARTICLE_MASS, DEFAULT_PARTICLE_ROTATIONAL_MASS, 1, ObiUtils.MakeFilter(ObiUtils.CollideWithEverything, 1), Color.white, "control point"); + } + + path.RecalculateLenght(Matrix4x4.identity, 0.00001f, 7); + + List particlePositions = new List(); + List particleNormals = new List(); + List particleThicknesses = new List(); + List particleInvMasses = new List(); + List particleInvRotationalMasses = new List(); + List particleFilters = new List(); + List particleColors = new List(); + + // In case the path is open, add a first particle. In closed paths, the last particle is also the first one. + if (!path.Closed) + { + particlePositions.Add(path.points.GetPositionAtMu(path.Closed, 0)); + particleNormals.Add(path.normals.GetAtMu(path.Closed, 0)); + particleThicknesses.Add(path.thicknesses.GetAtMu(path.Closed, 0)); + particleInvMasses.Add(ObiUtils.MassToInvMass(path.masses.GetAtMu(path.Closed, 0))); + particleInvRotationalMasses.Add(ObiUtils.MassToInvMass(path.rotationalMasses.GetAtMu(path.Closed, 0))); + particleFilters.Add(path.filters.GetAtMu(path.Closed, 0)); + particleColors.Add(path.colors.GetAtMu(path.Closed, 0)); + } + + // Create a particle group for the first control point: + groups[0].particleIndices.Clear(); + groups[0].particleIndices.Add(0); + + ReadOnlyCollection lengthTable = path.ArcLengthTable; + int spans = path.GetSpanCount(); + + for (int i = 0; i < spans; i++) + { + int firstArcLengthSample = i * (path.ArcLengthSamples + 1); + int lastArcLengthSample = (i + 1) * (path.ArcLengthSamples + 1); + + float upToSpanLength = lengthTable[firstArcLengthSample]; + float spanLength = lengthTable[lastArcLengthSample] - upToSpanLength; + + int particlesInSpan = 1 + Mathf.FloorToInt(spanLength / thickness * resolution); + float distance = spanLength / particlesInSpan; + + for (int j = 0; j < particlesInSpan; ++j) + { + float mu = path.GetMuAtLenght(upToSpanLength + distance * (j + 1)); + particlePositions.Add(path.points.GetPositionAtMu(path.Closed, mu)); + particleNormals.Add(path.normals.GetAtMu(path.Closed, mu)); + particleThicknesses.Add(path.thicknesses.GetAtMu(path.Closed, mu)); + particleInvMasses.Add(ObiUtils.MassToInvMass(path.masses.GetAtMu(path.Closed, mu))); + particleInvRotationalMasses.Add(ObiUtils.MassToInvMass(path.rotationalMasses.GetAtMu(path.Closed, mu))); + particleFilters.Add(path.filters.GetAtMu(path.Closed, mu)); + particleColors.Add(path.colors.GetAtMu(path.Closed, mu)); + } + + // Create a particle group for each control point: + if (!(path.Closed && i == spans - 1)) + { + groups[i + 1].particleIndices.Clear(); + groups[i + 1].particleIndices.Add(particlePositions.Count - 1); + } + + if (i % 100 == 0) + yield return new CoroutineJob.ProgressInfo("ObiRope: generating particles...", i / (float)spans); + } + + m_ActiveParticleCount = particlePositions.Count; + totalParticles = m_ActiveParticleCount; + + int numSegments = m_ActiveParticleCount - (path.Closed ? 0 : 1); + if (numSegments > 0) + m_InterParticleDistance = path.Length / (float)numSegments; + else + m_InterParticleDistance = 0; + + positions = new Vector3[totalParticles]; + orientations = new Quaternion[totalParticles]; + velocities = new Vector3[totalParticles]; + angularVelocities = new Vector3[totalParticles]; + invMasses = new float[totalParticles]; + invRotationalMasses = new float[totalParticles]; + principalRadii = new Vector3[totalParticles]; + filters = new int[totalParticles]; + restPositions = new Vector4[totalParticles]; + restOrientations = new Quaternion[totalParticles]; + colors = new Color[totalParticles]; + restLengths = new float[totalParticles]; + + for (int i = 0; i < m_ActiveParticleCount; i++) + { + invMasses[i] = particleInvMasses[i]; + invRotationalMasses[i] = particleInvRotationalMasses[i]; + positions[i] = particlePositions[i]; + restPositions[i] = positions[i]; + restPositions[i][3] = 1; // activate rest position. + principalRadii[i] = Vector3.one * particleThicknesses[i] * thickness; + filters[i] = particleFilters[i]; + colors[i] = particleColors[i]; + + if (i % 100 == 0) + yield return new CoroutineJob.ProgressInfo("ObiRod: generating particles...", i / (float)m_ActiveParticleCount); + } + + // Deformable edges: + CreateDeformableEdges(numSegments); + + // Create edge simplices: + CreateSimplices(numSegments); + + // Create distance constraints for the total number of particles, but only activate for the used ones. + IEnumerator dc = CreateStretchShearConstraints(particleNormals); + + while (dc.MoveNext()) + yield return dc.Current; + + // Create bending constraints: + IEnumerator bc = CreateBendTwistConstraints(); + + 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(); + + while (cc.MoveNext()) + yield return cc.Current; + + } + + protected virtual IEnumerator CreateStretchShearConstraints(List particleNormals) + { + stretchShearConstraintsData = new ObiStretchShearConstraintsData(); + + stretchShearConstraintsData.AddBatch(new ObiStretchShearConstraintsBatch()); + stretchShearConstraintsData.AddBatch(new ObiStretchShearConstraintsBatch()); + + // rotation minimizing frame: + ObiPathFrame frame = ObiPathFrame.Identity; + + for (int i = 0; i < totalParticles - 1; i++) + { + var batch = stretchShearConstraintsData.batches[i % 2] as ObiStretchShearConstraintsBatch; + + Vector2Int indices = new Vector2Int(i, i + 1); + Vector3 d = positions[indices.y] - positions[indices.x]; + restLengths[i] = d.magnitude; + + frame.Transport(positions[indices.x], d.normalized, 0); + + orientations[i] = Quaternion.LookRotation(frame.tangent, particleNormals[indices.x]); + restOrientations[i] = orientations[i]; + + // Also set the orientation of the next particle. If it is not the last one, we will overwrite it. + // This makes sure that open rods provide an orientation for their last particle (or rather, a phantom segment past the last particle). + + orientations[indices.y] = orientations[i]; + restOrientations[indices.y] = orientations[i]; + + batch.AddConstraint(indices, indices.x, restLengths[i], Quaternion.identity); + batch.activeConstraintCount++; + + if (i % 500 == 0) + yield return new CoroutineJob.ProgressInfo("ObiRod: generating structural constraints...", i / (float)(totalParticles - 1)); + + } + + // if the path is closed, add the last, loop closing constraint to a new batch to avoid sharing particles. + if (path.Closed) + { + var loopClosingBatch = new ObiStretchShearConstraintsBatch(); + stretchShearConstraintsData.AddBatch(loopClosingBatch); + + Vector2Int indices = new Vector2Int(m_ActiveParticleCount - 1, 0); + Vector3 d = positions[indices.y] - positions[indices.x]; + restLengths[m_ActiveParticleCount - 2] = d.magnitude; + + frame.Transport(positions[indices.x], d.normalized, 0); + + orientations[m_ActiveParticleCount - 1] = Quaternion.LookRotation(frame.tangent, particleNormals[indices.x]); + restOrientations[m_ActiveParticleCount - 1] = orientations[m_ActiveParticleCount - 1]; + + loopClosingBatch.AddConstraint(indices, indices.x, restLengths[m_ActiveParticleCount - 2], Quaternion.identity); + loopClosingBatch.activeConstraintCount++; + } + + // Recalculate rest length: + m_RestLength = 0; + foreach (float length in restLengths) + m_RestLength += length; + } + + protected virtual IEnumerator CreateBendTwistConstraints() + { + bendTwistConstraintsData = new ObiBendTwistConstraintsData(); + + // Add two batches: + bendTwistConstraintsData.AddBatch(new ObiBendTwistConstraintsBatch()); + bendTwistConstraintsData.AddBatch(new ObiBendTwistConstraintsBatch()); + + // the last bend constraint couples the last segment and a phantom segment past the last particle. + for (int i = 0; i < totalParticles - 1; i++) + { + + var batch = bendTwistConstraintsData.batches[i % 2] as ObiBendTwistConstraintsBatch; + + Vector2Int indices = new Vector2Int(i, i + 1); + + Quaternion darboux = keepInitialShape ? ObiUtils.RestDarboux(orientations[indices.x], orientations[indices.y]) : Quaternion.identity; + batch.AddConstraint(indices, darboux); + batch.activeConstraintCount++; + + if (i % 500 == 0) + yield return new CoroutineJob.ProgressInfo("ObiRod: generating structural constraints...", i / (float)(totalParticles - 1)); + + } + + // if the path is closed, add the last, loop closing constraints to a new batch to avoid sharing particles. + if (path.Closed) + { + var loopClosingBatch = new ObiBendTwistConstraintsBatch(); + bendTwistConstraintsData.AddBatch(loopClosingBatch); + + Vector2Int indices = new Vector2Int(m_ActiveParticleCount - 1, 0); + Quaternion darboux = keepInitialShape ? ObiUtils.RestDarboux(orientations[indices.x], orientations[indices.y]) : Quaternion.identity; + loopClosingBatch.AddConstraint(indices, darboux); + loopClosingBatch.activeConstraintCount++; + } + } + + protected virtual IEnumerator CreateChainConstraints() + { + chainConstraintsData = new ObiChainConstraintsData(); + + // Add a single batch: + var batch = new ObiChainConstraintsBatch(); + chainConstraintsData.AddBatch(batch); + + int[] indices = new int[m_ActiveParticleCount + (path.Closed ? 1 : 0)]; + + for (int i = 0; i < m_ActiveParticleCount; ++i) + indices[i] = i; + + // Add the first particle as the last index of the chain, if closed. + if (path.Closed) + indices[m_ActiveParticleCount] = 0; + + // TODO: variable distance between particles: + batch.AddConstraint(indices, m_InterParticleDistance, 1, 1); + batch.activeConstraintCount++; + + yield return 0; + } + + + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRodBlueprint.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRodBlueprint.cs.meta new file mode 100644 index 00000000..e866891f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRodBlueprint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e028b099aa5d14e399bc3d87df5b7737 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: d0123218ec6144d0983c099fc7339924, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprint.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprint.cs new file mode 100644 index 00000000..ce89d402 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprint.cs @@ -0,0 +1,236 @@ +using System.Collections; +using System.Collections.ObjectModel; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using System; + +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; + + protected override IEnumerator Initialize() + { + if (path.ControlPointCount < 2) + { + ClearParticleGroups(); + path.InsertControlPoint(0, Vector3.left, Vector3.left * 0.25f, Vector3.right * 0.25f, Vector3.up, DEFAULT_PARTICLE_MASS, 1, 1, ObiUtils.MakeFilter(ObiUtils.CollideWithEverything,1), Color.white, "control point"); + path.InsertControlPoint(1, Vector3.right, Vector3.left * 0.25f, Vector3.right * 0.25f, Vector3.up, DEFAULT_PARTICLE_MASS, 1, 1, ObiUtils.MakeFilter(ObiUtils.CollideWithEverything, 1), Color.white, "control point"); + } + + path.RecalculateLenght(Matrix4x4.identity, 0.00001f, 7); + + List particlePositions = new List(); + List particleThicknesses = new List(); + List particleInvMasses = new List(); + List particleFilters = new List(); + List particleColors = new List(); + + // In case the path is open, add a first particle. In closed paths, the last particle is also the first one. + if (!path.Closed) + { + particlePositions.Add(path.points.GetPositionAtMu(path.Closed, 0)); + particleThicknesses.Add(path.thicknesses.GetAtMu(path.Closed, 0)); + particleInvMasses.Add(ObiUtils.MassToInvMass(path.masses.GetAtMu(path.Closed, 0))); + particleFilters.Add(path.filters.GetAtMu(path.Closed, 0)); + particleColors.Add(path.colors.GetAtMu(path.Closed, 0)); + } + + // Create a particle group for the first control point: + groups[0].particleIndices.Clear(); + groups[0].particleIndices.Add(0); + + ReadOnlyCollection lengthTable = path.ArcLengthTable; + int spans = path.GetSpanCount(); + + for (int i = 0; i < spans; i++) + { + int firstArcLengthSample = i * (path.ArcLengthSamples + 1); + int lastArcLengthSample = (i + 1) * (path.ArcLengthSamples + 1); + + float upToSpanLength = lengthTable[firstArcLengthSample]; + float spanLength = lengthTable[lastArcLengthSample] - upToSpanLength; + + int particlesInSpan = 1 + Mathf.FloorToInt(spanLength / thickness * resolution); + float distance = spanLength / particlesInSpan; + + for (int j = 0; j < particlesInSpan; ++j) + { + float mu = path.GetMuAtLenght(upToSpanLength + distance * (j + 1)); + particlePositions.Add(path.points.GetPositionAtMu(path.Closed, mu)); + particleThicknesses.Add(path.thicknesses.GetAtMu(path.Closed, mu)); + particleInvMasses.Add(ObiUtils.MassToInvMass(path.masses.GetAtMu(path.Closed, mu))); + particleFilters.Add(path.filters.GetAtMu(path.Closed, mu)); + particleColors.Add(path.colors.GetAtMu(path.Closed, mu)); + } + + // Create a particle group for each control point: + if (!(path.Closed && i == spans - 1)) + { + groups[i + 1].particleIndices.Clear(); + groups[i + 1].particleIndices.Add(particlePositions.Count - 1); + } + + if (i % 100 == 0) + yield return new CoroutineJob.ProgressInfo("ObiRope: generating particles...", i / (float)spans); + } + + m_ActiveParticleCount = particlePositions.Count; + totalParticles = m_ActiveParticleCount + pooledParticles; + + int numSegments = m_ActiveParticleCount - (path.Closed ? 0 : 1); + if (numSegments > 0) + m_InterParticleDistance = path.Length / (float)numSegments; + else + m_InterParticleDistance = 0; + + positions = new Vector3[totalParticles]; + restPositions = new Vector4[totalParticles]; + velocities = new Vector3[totalParticles]; + invMasses = new float[totalParticles]; + principalRadii = new Vector3[totalParticles]; + filters = new int[totalParticles]; + colors = new Color[totalParticles]; + restLengths = new float[totalParticles]; + + for (int i = 0; i < m_ActiveParticleCount; i++) + { + invMasses[i] = particleInvMasses[i]; + positions[i] = particlePositions[i]; + restPositions[i] = positions[i]; + restPositions[i][3] = 1; // activate rest position. + principalRadii[i] = Vector3.one * particleThicknesses[i] * thickness; + filters[i] = particleFilters[i]; + colors[i] = particleColors[i]; + + if (i % 100 == 0) + yield return new CoroutineJob.ProgressInfo("ObiRope: generating particles...", i / (float)m_ActiveParticleCount); + } + + // Deformable edges: + CreateDeformableEdges(numSegments); + + // Create edge simplices: + CreateSimplices(numSegments); + + //Create distance constraints for the total number of particles, but only activate for the used ones. + IEnumerator dc = CreateDistanceConstraints(); + + while (dc.MoveNext()) + yield return dc.Current; + + //Create bending constraints: + IEnumerator bc = CreateBendingConstraints(); + + 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) + m_RestLength += length; + + } + + protected virtual IEnumerator CreateDistanceConstraints() + { + distanceConstraintsData = new ObiDistanceConstraintsData(); + + // Add two batches: for even and odd constraints: + distanceConstraintsData.AddBatch(new ObiDistanceConstraintsBatch()); + distanceConstraintsData.AddBatch(new ObiDistanceConstraintsBatch()); + + for (int i = 0; i < totalParticles - 1; i++) + { + var batch = distanceConstraintsData.batches[i % 2] as ObiDistanceConstraintsBatch; + + if (i < m_ActiveParticleCount - 1) + { + Vector2Int indices = new Vector2Int(i, i + 1); + restLengths[i] = Vector3.Distance(positions[indices.x], positions[indices.y]); + batch.AddConstraint(indices, restLengths[i]); + batch.activeConstraintCount++; + } + else + { + restLengths[i] = m_InterParticleDistance; + batch.AddConstraint(Vector2Int.zero, 0); + } + + if (i % 500 == 0) + yield return new CoroutineJob.ProgressInfo("ObiRope: generating structural constraints...", i / (float)(totalParticles - 1)); + + } + + // if the path is closed, add the last, loop closing constraint to a new batch to avoid sharing particles. + if (path.Closed) + { + var loopClosingBatch = new ObiDistanceConstraintsBatch(); + distanceConstraintsData.AddBatch(loopClosingBatch); + + Vector2Int indices = new Vector2Int(m_ActiveParticleCount - 1, 0); + restLengths[m_ActiveParticleCount - 2] = Vector3.Distance(positions[indices.x], positions[indices.y]); + loopClosingBatch.AddConstraint(indices, restLengths[m_ActiveParticleCount - 2]); + loopClosingBatch.activeConstraintCount++; + } + + } + + protected virtual IEnumerator CreateBendingConstraints() + { + bendConstraintsData = new ObiBendConstraintsData(); + + // Add three batches: + bendConstraintsData.AddBatch(new ObiBendConstraintsBatch()); + bendConstraintsData.AddBatch(new ObiBendConstraintsBatch()); + bendConstraintsData.AddBatch(new ObiBendConstraintsBatch()); + + for (int i = 0; i < totalParticles - 2; i++) + { + var batch = bendConstraintsData.batches[i % 3] as ObiBendConstraintsBatch; + + Vector3Int indices = new Vector3Int(i, i + 2, i + 1); + float restBend = 0;//ObiUtils.RestBendingConstraint(restPositions[indices[0]], restPositions[indices[1]], restPositions[indices[2]]); + batch.AddConstraint(indices, restBend); + + if (i < m_ActiveParticleCount - 2) + batch.activeConstraintCount++; + + if (i % 500 == 0) + yield return new CoroutineJob.ProgressInfo("ObiRope: generating structural constraints...", i / (float)(totalParticles - 2)); + + } + + // if the path is closed, add the last, loop closing constraints to a new batch to avoid sharing particles. + if (path.Closed) + { + var loopClosingBatch = new ObiBendConstraintsBatch(); + bendConstraintsData.AddBatch(loopClosingBatch); + + Vector3Int indices = new Vector3Int(m_ActiveParticleCount - 2, 0, m_ActiveParticleCount - 1); + loopClosingBatch.AddConstraint(indices, 0); + loopClosingBatch.activeConstraintCount++; + + var loopClosingBatch2 = new ObiBendConstraintsBatch(); + bendConstraintsData.AddBatch(loopClosingBatch2); + + indices = new Vector3Int(m_ActiveParticleCount - 1, 1, 0); + loopClosingBatch2.AddConstraint(indices, 0); + loopClosingBatch2.activeConstraintCount++; + } + } + + + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprint.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprint.cs.meta new file mode 100644 index 00000000..cbe78e7a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f7e67b5626124d0db9886e6cd2aacff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: d0123218ec6144d0983c099fc7339924, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprintBase.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprintBase.cs new file mode 100644 index 00000000..6e0cef36 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprintBase.cs @@ -0,0 +1,109 @@ +using System.Collections; +using System.Collections.ObjectModel; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using System; + +namespace Obi +{ + public abstract class ObiRopeBlueprintBase : ObiActorBlueprint + { + [HideInInspector] [SerializeField] public ObiPath path = new ObiPath(); + public float thickness = 0.1f; + + [Range(0, 1)] + public float resolution = 1; + + [HideInInspector] [SerializeField] protected float m_InterParticleDistance; + [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 + { + get { return m_InterParticleDistance; } + } + + public float restLength + { + get { return m_RestLength; } + } + + public void OnEnable() + { + path.OnPathChanged.AddListener(GenerateImmediate); + path.OnControlPointAdded.AddListener(ControlPointAdded); + path.OnControlPointRemoved.AddListener(ControlPointRemoved); + path.OnControlPointRenamed.AddListener(ControlPointRenamed); + } + + public void OnDisable() + { + path.OnPathChanged.RemoveAllListeners(); + path.OnControlPointAdded.RemoveAllListeners(); + path.OnControlPointRemoved.RemoveAllListeners(); + path.OnControlPointRenamed.RemoveAllListeners(); + } + + protected void ControlPointAdded(int index) + { + var group = InsertNewParticleGroup(path.GetName(index), index); + } + + protected void ControlPointRenamed(int index) + { + SetParticleGroupName(index, path.GetName(index)); + } + + protected void ControlPointRemoved(int index) + { + 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 % totalParticles; + deformableEdges[i * 2 + 1] = (i + 1) % totalParticles; + } + } + + 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; + } + } + + protected override IEnumerator Initialize() { yield return null; } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprintBase.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprintBase.cs.meta new file mode 100644 index 00000000..06f453f1 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprintBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4abe69b6abd2c4b0e8a621b8fba92dc9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures.meta new file mode 100644 index 00000000..6c6b110c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fa3e31464f45342fc90509e4fcb00976 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiRopeSection.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiRopeSection.cs new file mode 100644 index 00000000..be0c8eec --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiRopeSection.cs @@ -0,0 +1,52 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace Obi +{ + [CreateAssetMenu(fileName = "rope section", menuName = "Obi/Rope Section", order = 142)] + public class ObiRopeSection : ScriptableObject + { + [HideInInspector] public List vertices; + public int snapX = 0; + public int snapY = 0; + + public int Segments{ + get{return vertices.Count-1;} + } + + public void OnEnable(){ + + if (vertices == null){ + vertices = new List(); + CirclePreset(8); + } + + } + + public void CirclePreset(int segments){ + + vertices.Clear(); + + for (int j = 0; j <= segments; ++j){ + float angle = 2 * Mathf.PI / segments * j; + vertices.Add(Mathf.Cos(angle)*Vector2.right + Mathf.Sin(angle)*Vector2.up); + } + } + + /** + * Snaps a float value to the nearest multiple of snapInterval. + */ + public static int SnapTo(float val, int snapInterval, int threshold){ + int intVal = (int) val; + if (snapInterval <= 0) + return intVal; + int under = Mathf.FloorToInt(val / snapInterval) * snapInterval; + int over = under + snapInterval; + if (intVal - under < threshold) return under; + if (over - intVal < threshold) return over; + return intVal; + } + + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiRopeSection.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiRopeSection.cs.meta new file mode 100644 index 00000000..b1bd8cc9 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiRopeSection.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ee7737c43f5734f87be9e49d1bbfba78 +labels: +- ObiRope +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: fdb742a900c8d453ea5ce5027e80ad00, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiStructuralElement.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiStructuralElement.cs new file mode 100644 index 00000000..bffb6c47 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiStructuralElement.cs @@ -0,0 +1,16 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + // Abstracts rope topolgy as a list of elements. + [System.Serializable] + public class ObiStructuralElement + { + public int particle1; + public int particle2; + public float restLength; + public float constraintForce; + public float tearResistance; + } +} diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiStructuralElement.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiStructuralElement.cs.meta new file mode 100644 index 00000000..14c9910b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiStructuralElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2aecff76dda4241c5a0c15349e2419d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path.meta new file mode 100644 index 00000000..c6088756 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 75e833f2b944640a5934c15fbec8ac00 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels.meta new file mode 100644 index 00000000..a90531fa --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5172d3d605ca94f2db0ad73eaecbc4d4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiColorDataChannel.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiColorDataChannel.cs new file mode 100644 index 00000000..6b5aa938 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiColorDataChannel.cs @@ -0,0 +1,12 @@ +using UnityEngine; +using System; +using System.Collections; + +namespace Obi +{ + [Serializable] + public class ObiColorDataChannel : ObiPathDataChannelIdentity + { + public ObiColorDataChannel() : base(new ObiColorInterpolator3D()) { } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiColorDataChannel.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiColorDataChannel.cs.meta new file mode 100644 index 00000000..3a4703ee --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiColorDataChannel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4078c779a63154dddac14f5a1e65a692 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiFilterDataChannel.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiFilterDataChannel.cs new file mode 100644 index 00000000..ab59bfe8 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiFilterDataChannel.cs @@ -0,0 +1,10 @@ +using System; + +namespace Obi +{ + [Serializable] + public class ObiPhaseDataChannel : ObiPathDataChannelIdentity + { + public ObiPhaseDataChannel() : base(new ObiConstantInterpolator()) { } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiFilterDataChannel.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiFilterDataChannel.cs.meta new file mode 100644 index 00000000..a5ebfe7a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiFilterDataChannel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9cfdcf019ed7249799993815bfc3c0bd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiMassDataChannel.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiMassDataChannel.cs new file mode 100644 index 00000000..ae56531d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiMassDataChannel.cs @@ -0,0 +1,12 @@ +using UnityEngine; +using System; +using System.Collections; + +namespace Obi +{ + [Serializable] + public class ObiMassDataChannel : ObiPathDataChannelIdentity + { + public ObiMassDataChannel() : base(new ObiCatmullRomInterpolator()) { } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiMassDataChannel.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiMassDataChannel.cs.meta new file mode 100644 index 00000000..ac806b9d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiMassDataChannel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e55025008fa8f4bccae82dbaded0f019 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiNormalDataChannel.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiNormalDataChannel.cs new file mode 100644 index 00000000..3fee9576 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiNormalDataChannel.cs @@ -0,0 +1,12 @@ +using UnityEngine; +using System; +using System.Collections; + +namespace Obi +{ + [Serializable] + public class ObiNormalDataChannel : ObiPathDataChannelIdentity + { + public ObiNormalDataChannel() : base(new ObiCatmullRomInterpolator3D()) { } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiNormalDataChannel.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiNormalDataChannel.cs.meta new file mode 100644 index 00000000..7c99771e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiNormalDataChannel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4721087e73d0d422ab48ad62a2fd3d3b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannel.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannel.cs new file mode 100644 index 00000000..584be6de --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannel.cs @@ -0,0 +1,88 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + public interface IObiPathDataChannel + { + int Count { get; } + bool Dirty { get; } + void Clean(); + void RemoveAt(int index); + } + + public abstract class ObiPathDataChannel : IObiPathDataChannel + { + protected ObiInterpolator interpolator; + protected bool dirty = false; + public List data = new List(); + + public int Count + { + get { return data.Count; } + } + + public bool Dirty + { + get { return dirty; } + } + + public void Clean() + { + dirty = false; + } + + public ObiPathDataChannel(ObiInterpolator interpolator) + { + this.interpolator = interpolator; + } + + public T this[int i] + { + get { return data[i]; } + set { data[i] = value; dirty = true; } + } + + public void RemoveAt(int index) + { + data.RemoveAt(index); + dirty = true; + } + + public U Evaluate(U v0, U v1, U v2, U v3, float mu) + { + return interpolator.Evaluate(v0, v1, v2, v3, mu); + } + public U EvaluateFirstDerivative(U v0, U v1, U v2, U v3, float mu) + { + return interpolator.EvaluateFirstDerivative(v0, v1, v2, v3, mu); + } + public U EvaluateSecondDerivative(U v0, U v1, U v2, U v3, float mu) + { + return interpolator.EvaluateSecondDerivative(v0, v1, v2, v3, mu); + } + + public int GetSpanCount(bool closed) + { + int cps = Count; + if (cps < 2) + return 0; + + return closed ? cps : cps - 1; + } + + public int GetSpanControlPointAtMu(bool closed, float mu, out float spanMu) + { + + int spanCount = GetSpanCount(closed); + spanMu = mu * spanCount; + int i = (mu >= 1f) ? (spanCount - 1) : (int)spanMu; + spanMu -= i; + + return i; + } + + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannel.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannel.cs.meta new file mode 100644 index 00000000..4f3af992 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 43ab47ea5c62b45248edce6a9d099626 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannelIdentity.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannelIdentity.cs new file mode 100644 index 00000000..1148753d --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannelIdentity.cs @@ -0,0 +1,94 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + public abstract class ObiPathDataChannelIdentity : ObiPathDataChannel + { + public ObiPathDataChannelIdentity(ObiInterpolator interpolator) : base(interpolator) + { + } + + public T GetFirstDerivative(int index) + { + int nextCP = (index + 1) % Count; + + return EvaluateFirstDerivative(this[index], + this[index], + this[nextCP], + this[nextCP], 0); + } + + public T GetSecondDerivative(int index) + { + int nextCP = (index + 1) % Count; + + return EvaluateSecondDerivative(this[index], + this[index], + this[nextCP], + this[nextCP], 0); + } + + public T GetAtMu(bool closed, float mu) + { + int cps = Count; + if (cps >= 2) + { + float p; + int i = GetSpanControlPointAtMu(closed, mu, out p); + int nextCP = (i + 1) % cps; + + return Evaluate(this[i], + this[i], + this[nextCP], + this[nextCP], p); + } + else + { + throw new InvalidOperationException("Cannot get property in path because it has less than 2 control points."); + } + } + + public T GetFirstDerivativeAtMu(bool closed, float mu) + { + int cps = Count; + if (cps >= 2) + { + float p; + int i = GetSpanControlPointAtMu(closed, mu, out p); + int nextCP = (i + 1) % cps; + + return EvaluateFirstDerivative(this[i], + this[i], + this[nextCP], + this[nextCP], p); + } + else + { + throw new InvalidOperationException("Cannot get derivative in path because it has less than 2 control points."); + } + } + + public T GetSecondDerivativeAtMu(bool closed, float mu) + { + int cps = Count; + if (cps >= 2) + { + float p; + int i = GetSpanControlPointAtMu(closed, mu, out p); + int nextCP = (i + 1) % cps; + + return EvaluateSecondDerivative(this[i], + this[i], + this[nextCP], + this[nextCP], p); + } + else + { + throw new InvalidOperationException("Cannot get second derivative in path because it has less than 2 control points."); + } + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannelIdentity.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannelIdentity.cs.meta new file mode 100644 index 00000000..9093cc6e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannelIdentity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 61b5c82c04eb14f1999e94baa1f073bc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPointsDataChannel.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPointsDataChannel.cs new file mode 100644 index 00000000..1aba7db1 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPointsDataChannel.cs @@ -0,0 +1,124 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Obi +{ + [Serializable] + public class ObiPointsDataChannel : ObiPathDataChannel + { + + public ObiPointsDataChannel() : base(new ObiCatmullRomInterpolator3D()) { } + + public Vector3 GetTangent(int index) + { + int nextCP = (index + 1) % Count; + + var wp1 = this[index]; + var wp2 = this[nextCP]; + + return EvaluateFirstDerivative(wp1.position, + wp1.outTangentEndpoint, + wp2.inTangentEndpoint, + wp2.position, 0); + } + + public Vector3 GetAcceleration(int index) + { + int nextCP = (index + 1) % Count; + + var wp1 = this[index]; + var wp2 = this[nextCP]; + + return EvaluateSecondDerivative(wp1.position, + wp1.outTangentEndpoint, + wp2.inTangentEndpoint, + wp2.position, 0); + } + + /** + * Returns spline position at time mu, with 0<=mu<=1 where 0 is the start of the spline + * and 1 is the end. + */ + public Vector3 GetPositionAtMu(bool closed,float mu) + { + int cps = Count; + if (cps >= 2) + { + + float p; + int i = GetSpanControlPointAtMu(closed, mu, out p); + int nextCP = (i + 1) % cps; + + var wp1 = this[i]; + var wp2 = this[nextCP]; + + return Evaluate(wp1.position, + wp1.outTangentEndpoint, + wp2.inTangentEndpoint, + wp2.position, p); + } + else + { + throw new InvalidOperationException("Cannot get position in path because it has zero control points."); + } + } + + /** + * Returns normal tangent vector at time mu, with 0<=mu<=1 where 0 is the start of the spline + * and 1 is the end. + */ + public Vector3 GetTangentAtMu(bool closed, float mu) + { + + int cps = Count; + if (cps >= 2) + { + float p; + int i = GetSpanControlPointAtMu(closed, mu, out p); + int nextCP = (i + 1) % cps; + + var wp1 = this[i]; + var wp2 = this[nextCP]; + + return EvaluateFirstDerivative(wp1.position, + wp1.outTangentEndpoint, + wp2.inTangentEndpoint, + wp2.position, p); + } + else + { + throw new InvalidOperationException("Cannot get derivative in path because it has less than 2 control points."); + } + } + + /** + * Returns acceleration at time mu, with 0<=mu<=1 where 0 is the start of the spline + * and 1 is the end. + */ + public Vector3 GetAccelerationAtMu(bool closed, float mu) + { + + int cps = Count; + if (cps >= 2) + { + float p; + int i = GetSpanControlPointAtMu(closed, mu, out p); + int nextCP = (i + 1) % cps; + + var wp1 = this[i]; + var wp2 = this[nextCP]; + + return EvaluateSecondDerivative(wp1.position, + wp1.outTangentEndpoint, + wp2.inTangentEndpoint, + wp2.position, p); + } + else + { + throw new InvalidOperationException("Cannot get second derivative in path because it has less than 2 control points."); + } + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPointsDataChannel.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPointsDataChannel.cs.meta new file mode 100644 index 00000000..5cec3280 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPointsDataChannel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d710ff448ae4e4a6f9351a678af9a8ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiRotationalMassDataChannel.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiRotationalMassDataChannel.cs new file mode 100644 index 00000000..e26ff82a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiRotationalMassDataChannel.cs @@ -0,0 +1,12 @@ +using UnityEngine; +using System; +using System.Collections; + +namespace Obi +{ + [Serializable] + public class ObiRotationalMassDataChannel : ObiPathDataChannelIdentity + { + public ObiRotationalMassDataChannel() : base(new ObiCatmullRomInterpolator()) { } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiRotationalMassDataChannel.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiRotationalMassDataChannel.cs.meta new file mode 100644 index 00000000..9b1a75ce --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiRotationalMassDataChannel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 28c38822e5a79441a8177689f83644e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiThicknessDataChannel.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiThicknessDataChannel.cs new file mode 100644 index 00000000..80e90dbe --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiThicknessDataChannel.cs @@ -0,0 +1,12 @@ +using UnityEngine; +using System; +using System.Collections; + +namespace Obi +{ + [Serializable] + public class ObiThicknessDataChannel : ObiPathDataChannelIdentity + { + public ObiThicknessDataChannel() : base(new ObiCatmullRomInterpolator()) { } + } +} diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiThicknessDataChannel.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiThicknessDataChannel.cs.meta new file mode 100644 index 00000000..81e98c4b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiThicknessDataChannel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b414fbc6ce2db42299dc01619ed4fc97 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators.meta new file mode 100644 index 00000000..0d67e6f4 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e85cc8f3b96cf4b4c9be1e6af0a0a99b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator.cs new file mode 100644 index 00000000..a15ba18a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator.cs @@ -0,0 +1,49 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public class ObiCatmullRomInterpolator : ObiInterpolator + { + /** + * 1D bezier spline interpolation + */ + public float Evaluate(float y0, float y1, float y2, float y3, float mu) + { + + float imu = 1 - mu; + return imu * imu * imu * y0 + + 3f * imu * imu * mu * y1 + + 3f * imu * mu * mu * y2 + + mu * mu * mu * y3; + + } + + /** + * 1D catmull rom spline second derivative + */ + public float EvaluateFirstDerivative(float y0, float y1, float y2, float y3, float mu) + { + + float imu = 1 - mu; + return 3f * imu * imu * (y1 - y0) + + 6f * imu * mu * (y2 - y1) + + 3f * mu * mu * (y3 - y2); + + } + + + /** + * 1D catmull rom spline second derivative + */ + public float EvaluateSecondDerivative(float y0, float y1, float y2, float y3, float mu) + { + + float imu = 1 - mu; + return 3f * imu * imu * (y1 - y0) + + 6f * imu * mu * (y2 - y1) + + 3f * mu * mu * (y3 - y2); + + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator.cs.meta new file mode 100644 index 00000000..dfd028c1 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 93918aac247384d8289d151d77dc4dc2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator3D.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator3D.cs new file mode 100644 index 00000000..68bf48c6 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator3D.cs @@ -0,0 +1,46 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public class ObiCatmullRomInterpolator3D : ObiInterpolator + { + private ObiCatmullRomInterpolator interpolator = new ObiCatmullRomInterpolator(); + + /** + * 3D spline interpolation + */ + public Vector3 Evaluate(Vector3 y0, Vector3 y1, Vector3 y2, Vector3 y3, float mu) + { + + return new Vector3(interpolator.Evaluate(y0.x, y1.x, y2.x, y3.x, mu), + interpolator.Evaluate(y0.y, y1.y, y2.y, y3.y, mu), + interpolator.Evaluate(y0.z, y1.z, y2.z, y3.z, mu)); + + } + + /** + * 3D spline first derivative + */ + public Vector3 EvaluateFirstDerivative(Vector3 y0, Vector3 y1, Vector3 y2, Vector3 y3, float mu) + { + + return new Vector3(interpolator.EvaluateFirstDerivative(y0.x, y1.x, y2.x, y3.x, mu), + interpolator.EvaluateFirstDerivative(y0.y, y1.y, y2.y, y3.y, mu), + interpolator.EvaluateFirstDerivative(y0.z, y1.z, y2.z, y3.z, mu)); + + } + + /** + * 3D spline second derivative + */ + public Vector3 EvaluateSecondDerivative(Vector3 y0, Vector3 y1, Vector3 y2, Vector3 y3, float mu) + { + + return new Vector3(interpolator.EvaluateSecondDerivative(y0.x, y1.x, y2.x, y3.x, mu), + interpolator.EvaluateSecondDerivative(y0.y, y1.y, y2.y, y3.y, mu), + interpolator.EvaluateSecondDerivative(y0.z, y1.z, y2.z, y3.z, mu)); + + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator3D.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator3D.cs.meta new file mode 100644 index 00000000..7d9398e2 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator3D.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 845dbd641b61b490bb94d745b6879e97 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiColorInterpolator3D.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiColorInterpolator3D.cs new file mode 100644 index 00000000..4f7b7f48 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiColorInterpolator3D.cs @@ -0,0 +1,49 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public class ObiColorInterpolator3D : ObiInterpolator + { + private ObiCatmullRomInterpolator interpolator = new ObiCatmullRomInterpolator(); + + /** + * 3D spline interpolation + */ + public Color Evaluate(Color y0, Color y1, Color y2, Color y3, float mu) + { + + return new Color(interpolator.Evaluate(y0.r, y1.r, y2.r, y3.r, mu), + interpolator.Evaluate(y0.g, y1.g, y2.g, y3.g, mu), + interpolator.Evaluate(y0.b, y1.b, y2.b, y3.b, mu), + interpolator.Evaluate(y0.a, y1.a, y2.a, y3.a, mu)); + + } + + /** + * 3D spline first derivative + */ + public Color EvaluateFirstDerivative(Color y0, Color y1, Color y2, Color y3, float mu) + { + + return new Color(interpolator.EvaluateFirstDerivative(y0.r, y1.r, y2.r, y3.r, mu), + interpolator.EvaluateFirstDerivative(y0.g, y1.g, y2.g, y3.g, mu), + interpolator.EvaluateFirstDerivative(y0.b, y1.b, y2.b, y3.b, mu), + interpolator.EvaluateFirstDerivative(y0.a, y1.a, y2.a, y3.a, mu)); + + } + + /** + * 3D spline second derivative + */ + public Color EvaluateSecondDerivative(Color y0, Color y1, Color y2, Color y3, float mu) + { + + return new Color(interpolator.EvaluateSecondDerivative(y0.r, y1.r, y2.r, y3.r, mu), + interpolator.EvaluateSecondDerivative(y0.g, y1.g, y2.g, y3.g, mu), + interpolator.EvaluateSecondDerivative(y0.b, y1.b, y2.b, y3.b, mu), + interpolator.EvaluateSecondDerivative(y0.a, y1.a, y2.a, y3.a, mu)); + + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiColorInterpolator3D.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiColorInterpolator3D.cs.meta new file mode 100644 index 00000000..c100772a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiColorInterpolator3D.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1c2bda61c040346db8efd82f64c2422e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiConstantInterpolator.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiConstantInterpolator.cs new file mode 100644 index 00000000..e404e94c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiConstantInterpolator.cs @@ -0,0 +1,33 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + public class ObiConstantInterpolator : ObiInterpolator + { + /** + * constant interpolator + */ + public int Evaluate(int y0, int y1, int y2, int y3, float mu) + { + return mu < 0.5f ? y1 : y2; + } + + /** + * derivative of constant value: + */ + public int EvaluateFirstDerivative(int y0, int y1, int y2, int y3, float mu) + { + return 0; + } + + + /** + * second derivative of constant value: + */ + public int EvaluateSecondDerivative(int y0, int y1, int y2, int y3, float mu) + { + return 0; + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiConstantInterpolator.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiConstantInterpolator.cs.meta new file mode 100644 index 00000000..a4c14046 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiConstantInterpolator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 33f10aef9ed544b14a762a9c6e8bf411 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiInterpolator.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiInterpolator.cs new file mode 100644 index 00000000..1e03c33b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiInterpolator.cs @@ -0,0 +1,13 @@ +using UnityEngine; +using System.Collections; + +namespace Obi +{ + + public interface ObiInterpolator + { + T Evaluate(T v0, T v1, T v2, T v3, float mu); + T EvaluateFirstDerivative(T v0, T v1, T v2, T v3, float mu); + T EvaluateSecondDerivative(T v0, T v1, T v2, T v3, float mu); + } +} diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiInterpolator.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiInterpolator.cs.meta new file mode 100644 index 00000000..47fd4966 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiInterpolator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af25f2a4d723548bfafa551b6da56d25 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPath.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPath.cs new file mode 100644 index 00000000..6d5bb0b0 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPath.cs @@ -0,0 +1,408 @@ +using UnityEngine; +using UnityEngine.Events; +using System; +using System.Collections.ObjectModel; +using System.Collections.Generic; +using UnityEngine.Serialization; + +namespace Obi +{ + [System.Serializable] + public class PathControlPointEvent : UnityEvent + { + } + + [Serializable] + public class ObiPath + { + [HideInInspector] [SerializeField] List m_Names = new List(); + [HideInInspector] [SerializeField] public ObiPointsDataChannel m_Points = new ObiPointsDataChannel(); + [HideInInspector] [SerializeField] ObiNormalDataChannel m_Normals = new ObiNormalDataChannel(); + [HideInInspector] [SerializeField] ObiColorDataChannel m_Colors = new ObiColorDataChannel(); + [HideInInspector] [SerializeField] ObiThicknessDataChannel m_Thickness = new ObiThicknessDataChannel(); + [HideInInspector] [SerializeField] ObiMassDataChannel m_Masses = new ObiMassDataChannel(); + [HideInInspector] [SerializeField] ObiRotationalMassDataChannel m_RotationalMasses = new ObiRotationalMassDataChannel(); + + [FormerlySerializedAs("m_Phases")] + [HideInInspector] [SerializeField] ObiPhaseDataChannel m_Filters = new ObiPhaseDataChannel(); + + [HideInInspector] [SerializeField] private bool m_Closed = false; + + protected bool dirty = false; + protected const int arcLenghtSamples = 20; + [HideInInspector] [SerializeField] protected List m_ArcLengthTable = new List(); + [HideInInspector] [SerializeField] protected float m_TotalSplineLenght = 0.0f; + + public UnityEvent OnPathChanged = new UnityEvent(); + public PathControlPointEvent OnControlPointAdded = new PathControlPointEvent(); + public PathControlPointEvent OnControlPointRemoved = new PathControlPointEvent(); + public PathControlPointEvent OnControlPointRenamed = new PathControlPointEvent(); + + private IEnumerable GetDataChannels() + { + yield return m_Points; + yield return m_Normals; + yield return m_Colors; + yield return m_Thickness; + yield return m_Masses; + yield return m_RotationalMasses; + yield return m_Filters; + } + + public ObiPointsDataChannel points { get { return m_Points; }} + public ObiNormalDataChannel normals { get { return m_Normals; } } + public ObiColorDataChannel colors { get { return m_Colors; } } + public ObiThicknessDataChannel thicknesses { get { return m_Thickness; } } + public ObiMassDataChannel masses { get { return m_Masses; } } + public ObiRotationalMassDataChannel rotationalMasses { get { return m_RotationalMasses; } } + public ObiPhaseDataChannel filters { get { return m_Filters; } } + + public ReadOnlyCollection ArcLengthTable + { + get { return m_ArcLengthTable.AsReadOnly(); } + } + + public float Length + { + get { return m_TotalSplineLenght; } + } + + public int ArcLengthSamples + { + get { return arcLenghtSamples; } + } + + public int ControlPointCount + { + get { return m_Points.Count;} + } + + public bool Closed + { + get { return m_Closed; } + set + { + if (value != m_Closed) + { + m_Closed = value; + dirty = true; + } + } + } + + public int GetSpanCount() + { + return m_Points.GetSpanCount(m_Closed); + } + + public int GetSpanControlPointForMu(float mu, out float spanMu) + { + return m_Points.GetSpanControlPointAtMu(m_Closed, mu, out spanMu); + } + + public int GetClosestControlPointIndex(float mu) + { + float spanMu; + int cp = GetSpanControlPointForMu(mu, out spanMu); + + if (spanMu > 0.5f) + return (cp + 1) % ControlPointCount; + else + return cp % ControlPointCount; + } + + /** + * Returns the curve parameter (mu) at a certain length of the curve, using linear interpolation + * of the values cached in arcLengthTable. + */ + public float GetMuAtLenght(float length) + { + if (length <= 0) return 0; + if (length >= m_TotalSplineLenght) return 1; + + int i; + for (i = 1; i < m_ArcLengthTable.Count; ++i) + { + if (length < m_ArcLengthTable[i]) break; + } + + float prevMu = (i - 1) / (float)(m_ArcLengthTable.Count - 1); + float nextMu = i / (float)(m_ArcLengthTable.Count - 1); + + float s = (length - m_ArcLengthTable[i - 1]) / (m_ArcLengthTable[i] - m_ArcLengthTable[i - 1]); + + return prevMu + (nextMu - prevMu) * s; + } + + /** + * Recalculates spline arc lenght in world space using Gauss-Lobatto adaptive integration. + * @param acc minimum accuray desired (eg 0.00001f) + * @param maxevals maximum number of spline evaluations we want to allow per segment. + */ + public float RecalculateLenght(Matrix4x4 referenceFrame, float acc, int maxevals) + { + if (referenceFrame == null) + { + m_TotalSplineLenght = 0; + return 0; + } + + m_TotalSplineLenght = 0.0f; + m_ArcLengthTable.Clear(); + m_ArcLengthTable.Add(0); + + float step = 1 / (float)(arcLenghtSamples + 1); + int controlPoints = ControlPointCount; + + if (controlPoints >= 2) + { + + int spans = GetSpanCount(); + + for (int cp = 0; cp < spans; ++cp) + { + int nextCP = (cp + 1) % controlPoints; + var wp1 = m_Points[cp]; + var wp2 = m_Points[nextCP]; + + Vector3 _p = referenceFrame.MultiplyPoint3x4(wp1.position); + Vector3 p = referenceFrame.MultiplyPoint3x4(wp1.outTangentEndpoint); + Vector3 p_ = referenceFrame.MultiplyPoint3x4(wp2.inTangentEndpoint); + Vector3 p__ = referenceFrame.MultiplyPoint3x4(wp2.position); + + for (int i = 0; i <= Mathf.Max(1, arcLenghtSamples); ++i) + { + + float a = i * step; + float b = (i + 1) * step; + + float segmentLength = GaussLobattoIntegrationStep(_p, p, p_, p__, a, b, + m_Points.EvaluateFirstDerivative(_p, p, p_, p__, a).magnitude, + m_Points.EvaluateFirstDerivative(_p, p, p_, p__, b).magnitude, 0, maxevals, acc); + + m_TotalSplineLenght += segmentLength; + + m_ArcLengthTable.Add(m_TotalSplineLenght); + + } + + } + } + else + { + Debug.LogWarning("A path needs at least 2 control points to be defined."); + } + + return m_TotalSplineLenght; + } + + /** + * One step of the adaptive integration method using Gauss-Lobatto quadrature. + * Takes advantage of the fact that the arc lenght of a vector function is equal to the + * integral of the magnitude of first derivative. + */ + private float GaussLobattoIntegrationStep(Vector3 p1, Vector3 p2, Vector3 p3, Vector3 p4, + float a, float b, + float fa, float fb, int nevals, int maxevals, float acc) + { + + if (nevals >= maxevals) return 0; + + // Constants used in the algorithm + float alpha = Mathf.Sqrt(2.0f / 3.0f); + float beta = 1.0f / Mathf.Sqrt(5.0f); + + // Here the abcissa points and function values for both the 4-point + // and the 7-point rule are calculated (the points at the end of + // interval come from the function call, i.e., fa and fb. Also note + // the 7-point rule re-uses all the points of the 4-point rule.) + float h = (b - a) / 2; + float m = (a + b) / 2; + + float mll = m - alpha * h; + float ml = m - beta * h; + float mr = m + beta * h; + float mrr = m + alpha * h; + nevals += 5; + + float fmll = m_Points.EvaluateFirstDerivative(p1, p2, p3, p4, mll).magnitude; + float fml = m_Points.EvaluateFirstDerivative(p1, p2, p3, p4, ml).magnitude; + float fm = m_Points.EvaluateFirstDerivative(p1, p2, p3, p4, m).magnitude; + float fmr = m_Points.EvaluateFirstDerivative(p1, p2, p3, p4, mr).magnitude; + float fmrr = m_Points.EvaluateFirstDerivative(p1, p2, p3, p4, mrr).magnitude; + + // Both the 4-point and 7-point rule integrals are evaluted + float integral4 = (h / 6) * (fa + fb + 5 * (fml + fmr)); + float integral7 = (h / 1470) * (77 * (fa + fb) + 432 * (fmll + fmrr) + 625 * (fml + fmr) + 672 * fm); + + // The difference betwen the 4-point and 7-point integrals is the + // estimate of the accuracy + + if ((integral4 - integral7) < acc || mll <= a || b <= mrr) + { + if (!(m > a && b > m)) + { + Debug.LogError("Spline integration reached an interval with no more machine numbers"); + } + return integral7; + } + else + { + return GaussLobattoIntegrationStep(p1, p2, p3, p4, a, mll, fa, fmll, nevals, maxevals, acc) + + GaussLobattoIntegrationStep(p1, p2, p3, p4, mll, ml, fmll, fml, nevals, maxevals, acc) + + GaussLobattoIntegrationStep(p1, p2, p3, p4, ml, m, fml, fm, nevals, maxevals, acc) + + GaussLobattoIntegrationStep(p1, p2, p3, p4, m, mr, fm, fmr, nevals, maxevals, acc) + + GaussLobattoIntegrationStep(p1, p2, p3, p4, mr, mrr, fmr, fmrr, nevals, maxevals, acc) + + GaussLobattoIntegrationStep(p1, p2, p3, p4, mrr, b, fmrr, fb, nevals, maxevals, acc); + + } + } + + public void SetName(int index, string name) + { + m_Names[index] = name; + if (OnControlPointRenamed != null) + OnControlPointRenamed.Invoke(index); + dirty = true; + } + + public string GetName(int index) + { + return m_Names[index]; + } + + public void AddControlPoint(Vector3 position, Vector3 inTangentVector, Vector3 outTangentVector, Vector3 normal, float mass, float rotationalMass, float thickness, int filter, Color color, string name) + { + InsertControlPoint(ControlPointCount, position, inTangentVector, outTangentVector, normal, mass, rotationalMass, thickness, filter, color, name); + } + + public void InsertControlPoint(int index, Vector3 position, Vector3 inTangentVector, Vector3 outTangentVector, Vector3 normal, float mass, float rotationalMass, float thickness, int filter, Color color, string name) + { + m_Points.data.Insert(index, new ObiWingedPoint(inTangentVector,position,outTangentVector)); + m_Colors.data.Insert(index, color); + m_Normals.data.Insert(index, normal); + m_Thickness.data.Insert(index, thickness); + m_Masses.data.Insert(index, mass); + m_RotationalMasses.data.Insert(index, rotationalMass); + m_Filters.data.Insert(index, filter); + m_Names.Insert(index,name); + + if (OnControlPointAdded != null) + OnControlPointAdded.Invoke(index); + + dirty = true; + } + + public int InsertControlPoint(float mu) + { + + int controlPoints = ControlPointCount; + if (controlPoints >= 2) + { + + if (!System.Single.IsNaN(mu)) + { + + float p; + int i = GetSpanControlPointForMu(mu, out p); + + int next = (i + 1) % controlPoints; + + var wp1 = m_Points[i]; + var wp2 = m_Points[next]; + + Vector3 P0_1 = (1 - p) * wp1.position + p * wp1.outTangentEndpoint; + Vector3 P1_2 = (1 - p) * wp1.outTangentEndpoint + p * wp2.inTangentEndpoint; + Vector3 P2_3 = (1 - p) * wp2.inTangentEndpoint + p * wp2.position; + + Vector3 P01_12 = (1 - p) * P0_1 + p * P1_2; + Vector3 P12_23 = (1 - p) * P1_2 + p * P2_3; + + Vector3 P0112_1223 = (1 - p) * P01_12 + p * P12_23; + + wp1.SetOutTangentEndpoint(P0_1); + wp2.SetInTangentEndpoint(P2_3); + + m_Points[i] = wp1; + m_Points[next] = wp2; + + Color color = m_Colors.Evaluate(m_Colors[i], + m_Colors[i], + m_Colors[next], + m_Colors[next], p); + + Vector3 normal = m_Normals.Evaluate(m_Normals[i], + m_Normals[i], + m_Normals[next], + m_Normals[next], p); + + float thickness = m_Thickness.Evaluate(m_Thickness[i], + m_Thickness[i], + m_Thickness[next], + m_Thickness[next], p); + + float mass = m_Masses.Evaluate(m_Masses[i], + m_Masses[i], + m_Masses[next], + m_Masses[next], p); + + float rotationalMass = m_RotationalMasses.Evaluate(m_RotationalMasses[i], + m_RotationalMasses[i], + m_RotationalMasses[next], + m_RotationalMasses[next], p); + + int filter = m_Filters.Evaluate(m_Filters[i], + m_Filters[i], + m_Filters[next], + m_Filters[next], p); + + InsertControlPoint(i + 1, P0112_1223, P01_12 - P0112_1223, P12_23 - P0112_1223, normal, mass,rotationalMass, thickness, filter, color, GetName(i)); + + return i + 1; + } + } + return -1; + + } + + public void Clear() + { + for (int i = ControlPointCount-1; i >= 0; --i) + RemoveControlPoint(i); + + m_TotalSplineLenght = 0.0f; + m_ArcLengthTable.Clear(); + m_ArcLengthTable.Add(0); + } + + public void RemoveControlPoint(int index) + { + foreach (var channel in GetDataChannels()) + channel.RemoveAt(index); + + m_Names.RemoveAt(index); + + if (OnControlPointRemoved != null) + OnControlPointRemoved.Invoke(index); + + dirty = true; + } + + public void FlushEvents() + { + bool isDirty = dirty; + foreach (var channel in GetDataChannels()) + { + isDirty |= channel.Dirty; + channel.Clean(); + } + + if (OnPathChanged != null && isDirty) + { + dirty = false; + OnPathChanged.Invoke(); + } + } + + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPath.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPath.cs.meta new file mode 100644 index 00000000..8236881b --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPath.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ee1575a4e45ef4a8ebafa0e5e2e51da5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathFrame.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathFrame.cs new file mode 100644 index 00000000..38377d46 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathFrame.cs @@ -0,0 +1,170 @@ +using System; +using UnityEngine; + +namespace Obi +{ + public struct ObiPathFrame + { + public enum Axis + { + X = 0, + Y = 1, + Z = 2 + } + + 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; + public Vector3 binormal; + + public Vector4 color; + public float thickness; + + public ObiPathFrame(Vector3 position, Vector3 tangent, Vector3 normal, Vector3 binormal, Vector4 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 = Vector3.zero; + tangent = Vector3.forward; + normal = Vector3.up; + binormal = Vector3.right; + color = Color.white; + thickness = 0; + } + + public static ObiPathFrame operator +(ObiPathFrame c1, ObiPathFrame c2) + { + return new ObiPathFrame(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 ObiPathFrame operator *(float f,ObiPathFrame c) + { + 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, 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; + 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.AngleAxis(twist, tangent); + normal = twistQ * normal; + binormal = twistQ * binormal; + } + + public void SetTwistAndTangent(float twist, Vector3 tangent) + { + this.tangent = tangent; + normal = new Vector3(tangent.y, tangent.x, 0).normalized; + binormal = Vector3.Cross(normal, tangent); + + Quaternion twistQ = Quaternion.AngleAxis(twist, tangent); + normal = twistQ * normal; + binormal = twistQ * binormal; + } + + public void Transport(ObiPathFrame frame, float twist) + { + // Calculate delta rotation: + Quaternion rotQ = Quaternion.FromToRotation(tangent, frame.tangent); + Quaternion twistQ = Quaternion.AngleAxis(twist, frame.tangent); + Quaternion finalQ = twistQ * rotQ; + + // Rotate previous frame axes to obtain the new ones: + normal = finalQ * normal; + binormal = finalQ * binormal; + tangent = frame.tangent; + position = frame.position; + thickness = frame.thickness; + color = frame.color; + } + + public void Transport(Vector3 newPosition, Vector3 newTangent, float twist) + { + // Calculate delta rotation: + Quaternion rotQ = Quaternion.FromToRotation(tangent, newTangent); + Quaternion twistQ = Quaternion.AngleAxis(twist, newTangent); + Quaternion finalQ = twistQ * rotQ; + + // Rotate previous frame axes to obtain the new ones: + normal = finalQ * normal; + binormal = finalQ * binormal; + tangent = newTangent; + position = newPosition; + + } + + // Transport, hinting the normal. + public void Transport(Vector3 newPosition, Vector3 newTangent, Vector3 newNormal, float twist) + { + normal = Quaternion.AngleAxis(twist, newTangent) * newNormal; + tangent = newTangent; + binormal = Vector3.Cross(normal, tangent); + position = newPosition; + } + + public Matrix4x4 ToMatrix(Axis mainAxis) + { + Matrix4x4 basis = new Matrix4x4(); + + int xo = ((int)mainAxis) % 3 * 4; + int yo = ((int)mainAxis + 1) % 3 * 4; + int zo = ((int)mainAxis + 2) % 3 * 4; + + basis[xo] = tangent[0]; + basis[xo + 1] = tangent[1]; + basis[xo + 2] = tangent[2]; + + basis[yo] = binormal[0]; + basis[yo + 1] = binormal[1]; + basis[yo + 2] = binormal[2]; + + basis[zo] = normal[0]; + basis[zo + 1] = normal[1]; + basis[zo + 2] = normal[2]; + + 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); + } + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathFrame.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathFrame.cs.meta new file mode 100644 index 00000000..b02d82d4 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathFrame.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 237e9ecf813f646fd8502768445f4ab6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathSmoother.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathSmoother.cs new file mode 100644 index 00000000..1251981a --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathSmoother.cs @@ -0,0 +1,101 @@ +using UnityEngine; +using System; + +namespace Obi +{ + [ExecuteInEditMode] + [RequireComponent(typeof(ObiRopeBase))] + public class ObiPathSmoother : MonoBehaviour, ObiActorRenderer + { + [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; + + [Range(0, 3)] + [Tooltip("Smoothing iterations applied to the path. A smoothing value of 0 won't perform any smoothing at all. Note that smoothing is applied after decimation.")] + public uint smoothing = 0; + + [Tooltip("Twist in degrees applied to each sucessive path section.")] + public float twist = 0; + + public ObiActor actor { get; private set; } + + [HideInInspector] public int indexInSystem = 0; + + public float 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 { + if (actor.isLoaded) + { + var system = actor.solver.GetRenderSystem() as ObiPathSmootherRenderSystem; + + if (system != null) + return system.GetSmoothFrameCount(indexInSystem); + } + return 0; + } + } + + public void OnEnable() + { + actor = GetComponent(); + ((ObiActorRenderer)this).EnableRenderer(); + } + + private void OnDisable() + { + ((ObiActorRenderer)this).DisableRenderer(); + } + + private void OnValidate() + { + ((ObiActorRenderer)this).SetRendererDirty(Oni.RenderingSystemType.AllSmoothedRopes); + } + + public ObiPathFrame GetSectionAt(float mu) + { + if (actor.isLoaded) + { + var system = actor.solver.GetRenderSystem() as ObiPathSmootherRenderSystem; + + if (system != null) + return system.GetFrameAt(indexInSystem, mu); + } + + return ObiPathFrame.Identity; + } + + RenderSystem ObiRenderer.CreateRenderSystem(ObiSolver solver) + { + switch (solver.backendType) + { + +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) + case ObiSolver.BackendType.Burst: return new BurstPathSmootherRenderSystem(solver); +#endif + case ObiSolver.BackendType.Compute: + default: + + if (SystemInfo.supportsComputeShaders) + return new ComputePathSmootherRenderSystem(solver); + return null; + + } + } + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathSmoother.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathSmoother.cs.meta new file mode 100644 index 00000000..bbfec3df --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathSmoother.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 958c969cfb16745f192d4d7bd28b7178 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8791eecf125744cbeadea65319c29d5a, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiWingedPoint.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiWingedPoint.cs new file mode 100644 index 00000000..f3d37db8 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiWingedPoint.cs @@ -0,0 +1,100 @@ +using UnityEngine; +using System; +using System.Collections; + +namespace Obi +{ + [Serializable] + public struct ObiWingedPoint + { + public enum TangentMode + { + Aligned, + Mirrored, + Free, + } + + public TangentMode tangentMode; + public Vector3 inTangent; + public Vector3 position; + public Vector3 outTangent; + + public Vector3 inTangentEndpoint + { + get { return position + inTangent; } + } + + public Vector3 outTangentEndpoint + { + get { return position + outTangent; } + } + + public ObiWingedPoint(Vector3 inTangent, Vector3 point, Vector3 outTangent) + { + this.tangentMode = TangentMode.Aligned; + this.inTangent = inTangent; + this.position = point; + this.outTangent = outTangent; + } + + public void SetInTangentEndpoint(Vector3 value) + { + Vector3 newTangent = value - position; + + switch (tangentMode) + { + case TangentMode.Mirrored: outTangent = -newTangent; break; + case TangentMode.Aligned: outTangent = -newTangent.normalized * outTangent.magnitude; break; + } + + inTangent = newTangent; + } + + public void SetOutTangentEndpoint(Vector3 value) + { + Vector3 newTangent = value - position; + + switch (tangentMode) + { + case TangentMode.Mirrored: inTangent = -newTangent; break; + case TangentMode.Aligned: inTangent = -newTangent.normalized * inTangent.magnitude; break; + } + + outTangent = newTangent; + } + + public void SetInTangent(Vector3 value) + { + Vector3 newTangent = value; + + switch (tangentMode) + { + case TangentMode.Mirrored: outTangent = -newTangent; break; + case TangentMode.Aligned: outTangent = -newTangent.normalized * outTangent.magnitude; break; + } + + inTangent = newTangent; + } + + public void SetOutTangent(Vector3 value) + { + Vector3 newTangent = value; + + switch (tangentMode) + { + case TangentMode.Mirrored: inTangent = -newTangent; break; + case TangentMode.Aligned: inTangent = -newTangent.normalized * inTangent.magnitude; break; + } + + outTangent = newTangent; + } + + public void Transform(Vector3 translation, Quaternion rotation, Vector3 scale) + { + position += translation; + inTangent = rotation * Vector3.Scale(inTangent, scale); + outTangent = rotation * Vector3.Scale(outTangent, scale); + } + } + +} diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiWingedPoint.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiWingedPoint.cs.meta new file mode 100644 index 00000000..dd0c6fcd --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiWingedPoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 76ee869b5f2e5440ea0a1c8a1e161cde +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering.meta new file mode 100644 index 00000000..30985468 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 07dfc7e6a316349cba9d3b434f09ee68 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiChainRopeRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiChainRopeRenderSystem.cs new file mode 100644 index 00000000..eb6d1bf8 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiChainRopeRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiChainRopeRenderSystem.cs.meta new file mode 100644 index 00000000..276835a7 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiExtrudedRopeRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiExtrudedRopeRenderSystem.cs new file mode 100644 index 00000000..9d2f75b4 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiExtrudedRopeRenderSystem.cs @@ -0,0 +1,278 @@ + +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(); + + 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].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/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiExtrudedRopeRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiExtrudedRopeRenderSystem.cs.meta new file mode 100644 index 00000000..3b5bd971 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiLineRopeRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiLineRopeRenderSystem.cs new file mode 100644 index 00000000..dbb068e6 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiLineRopeRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiLineRopeRenderSystem.cs.meta new file mode 100644 index 00000000..1a6ddf1b --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiMeshRopeRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiMeshRopeRenderSystem.cs new file mode 100644 index 00000000..1f0e8ff9 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiMeshRopeRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiMeshRopeRenderSystem.cs.meta new file mode 100644 index 00000000..f739eb97 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiPathSmootherRenderSystem.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiPathSmootherRenderSystem.cs new file mode 100644 index 00000000..e6ad6456 --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiPathSmootherRenderSystem.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiPathSmootherRenderSystem.cs.meta new file mode 100644 index 00000000..3fb94beb --- /dev/null +++ b/xiaofang/Assets/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/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeChainRenderer.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeChainRenderer.cs new file mode 100644 index 00000000..361d445c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeChainRenderer.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using Unity.Profiling; + +namespace Obi +{ + [AddComponentMenu("Physics/Obi/Obi Rope Chain Renderer", 885)] + [ExecuteInEditMode] + public class ObiRopeChainRenderer : MonoBehaviour, ObiActorRenderer + { + [Serializable] + public struct LinkModifier + { + public Vector3 translation; + public Vector3 scale; + public Vector3 rotation; + + 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.*/ + + [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 List linkModifiers = new List(); + + public RenderBatchParams renderParameters = new RenderBatchParams(true); + + public ObiActor actor { get; private set; } + + void Awake() + { + actor = GetComponent(); + } + + public void OnEnable() + { + ((ObiActorRenderer)this).EnableRenderer(); + } + + public void OnDisable() + { + ((ObiActorRenderer)this).DisableRenderer(); + } + + public void OnValidate() + { + ((ObiActorRenderer)this).SetRendererDirty(Oni.RenderingSystemType.ChainRope); + } + + RenderSystem ObiRenderer.CreateRenderSystem(ObiSolver solver) + { + switch (solver.backendType) + { + +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) + case ObiSolver.BackendType.Burst: return new BurstChainRopeRenderSystem(solver); +#endif + case ObiSolver.BackendType.Compute: + default: + + if (SystemInfo.supportsComputeShaders) + return new ComputeChainRopeRenderSystem(solver); + return null; + } + } + } +} + diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeChainRenderer.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeChainRenderer.cs.meta new file mode 100644 index 00000000..0baf2dd5 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeChainRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 09ac962c0743c400aa230ebf871b6156 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 1289c40ad0e7c4fb3bd738f8a3f3e068, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeExtrudedRenderer.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeExtrudedRenderer.cs new file mode 100644 index 00000000..bac5b687 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeExtrudedRenderer.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using Unity.Profiling; + +namespace Obi +{ + [AddComponentMenu("Physics/Obi/Obi Rope Extruded Renderer", 883)] + [ExecuteInEditMode] + [RequireComponent(typeof(ObiPathSmoother))] + public class ObiRopeExtrudedRenderer : MonoBehaviour, ObiActorRenderer + { + 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. + + public Material material; + + public RenderBatchParams renderParameters = new RenderBatchParams(true); + + [Range(0, 1)] + public float uvAnchor = 0; /**< Normalized position of texture coordinate origin along rope.*/ + + public Vector2 uvScale = Vector2.one; /**< Scaling of uvs along rope.*/ + + public bool normalizeV = true; + + public ObiRopeSection section = null; /**< Section asset to be extruded along the rope.*/ + + public float thicknessScale = 0.8f; /**< Scales section thickness.*/ + + public ObiActor actor { get; private set; } + + public void Awake() + { + actor = GetComponent(); + } + + public void OnEnable() + { + smoother = GetComponent(); + ((ObiActorRenderer)this).EnableRenderer(); + + } + + public void OnDisable() + { + ((ObiActorRenderer)this).DisableRenderer(); + } + + public void OnValidate() + { + ((ObiActorRenderer)this).SetRendererDirty(Oni.RenderingSystemType.AllSmoothedRopes); + } + + RenderSystem ObiRenderer.CreateRenderSystem(ObiSolver solver) + { + switch (solver.backendType) + { + +#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; + } + } + + } +} + + diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeExtrudedRenderer.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeExtrudedRenderer.cs.meta new file mode 100644 index 00000000..042955db --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeExtrudedRenderer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: c4747da60837c44f9ba4b4a86879bcc8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - extrudedMesh: {instanceID: 0} + - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + executionOrder: 0 + icon: {fileID: 2800000, guid: a552ed0e1c0fd47c38eeff6d60b5b115, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeLineRenderer.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeLineRenderer.cs new file mode 100644 index 00000000..83a537ee --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeLineRenderer.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; +using Unity.Profiling; + +namespace Obi +{ + [AddComponentMenu("Physics/Obi/Obi Rope Line Renderer", 884)] + [ExecuteInEditMode] + [RequireComponent(typeof(ObiPathSmoother))] + public class ObiRopeLineRenderer : MonoBehaviour, ObiActorRenderer + { + public ObiActor actor { get; private set; } + + public Material material; + + public RenderBatchParams renderParams = new RenderBatchParams(true); + + [Range(0, 1)] + public float uvAnchor = 0; /**< Normalized position of texture coordinate origin along rope.*/ + + public Vector2 uvScale = Vector2.one; /**< Scaling of uvs along rope.*/ + + public bool normalizeV = true; + + public float thicknessScale = 0.8f; /**< Scales section thickness.*/ + + public void Awake() + { + actor = GetComponent(); + } + + void OnEnable() + { + ((ObiActorRenderer)this).EnableRenderer(); + } + + void OnDisable() + { + ((ObiActorRenderer)this).DisableRenderer(); + } + + 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 + case ObiSolver.BackendType.Compute: + default: + + if (SystemInfo.supportsComputeShaders) + return new ComputeLineRopeRenderSystem(solver); + return null; + } + } + } +} + + diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeLineRenderer.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeLineRenderer.cs.meta new file mode 100644 index 00000000..510cd3a7 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeLineRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 18f853588397d4a80a561203ed92fc8a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 905a18c273af443d6bc588b59ebd56f6, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeMeshRenderer.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeMeshRenderer.cs new file mode 100644 index 00000000..c18e3de7 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeMeshRenderer.cs @@ -0,0 +1,86 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace Obi +{ + [AddComponentMenu("Physics/Obi/Obi Rope Mesh Renderer", 886)] + [ExecuteInEditMode] + [RequireComponent(typeof(ObiPathSmoother))] + public class ObiRopeMeshRenderer : MonoBehaviour, ObiActorRenderer, IMeshDataProvider + { + public Renderer sourceRenderer { get; protected set; } + public ObiActor actor { get; private set; } + public uint meshInstances { get {return instances;} } + + [field: SerializeField] + public Mesh sourceMesh { get; set; } + + [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; + + public uint instances = 1; + public float instanceSpacing = 0; + + public float offset = 0; + public Vector3 scale = Vector3.one; + + public void Awake() + { + actor = GetComponent(); + sourceRenderer = GetComponent(); + } + + public void OnEnable() + { + ((ObiActorRenderer)this).EnableRenderer(); + } + + public void OnDisable() + { + ((ObiActorRenderer)this).DisableRenderer(); + } + + public void OnValidate() + { + ((ObiActorRenderer)this).SetRendererDirty(Oni.RenderingSystemType.MeshRope); + } + + RenderSystem ObiRenderer.CreateRenderSystem(ObiSolver solver) + { + switch (solver.backendType) + { + +#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) + case ObiSolver.BackendType.Burst: return new BurstMeshRopeRenderSystem(solver); +#endif + case ObiSolver.BackendType.Compute: + default: + + if (SystemInfo.supportsComputeShaders) + return new ComputeMeshRopeRenderSystem(solver); + return null; + } + } + + 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/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeMeshRenderer.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeMeshRenderer.cs.meta new file mode 100644 index 00000000..0ef5b36c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeMeshRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4ec7e70e3318044b69e11352b1f2136b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: c5afdc6c291b44a68be8bf66702358a5, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Utils.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Utils.meta new file mode 100644 index 00000000..1f703054 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Utils.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 55cc87411ee7647b4a078becb6a5ed01 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeAttach.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeAttach.cs new file mode 100644 index 00000000..7a108393 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeAttach.cs @@ -0,0 +1,23 @@ +using UnityEngine; + +namespace Obi +{ + public class ObiRopeAttach : MonoBehaviour + { + public ObiPathSmoother smoother; + [Range(0,1)] + public float m; + + public void LateUpdate() + { + if (smoother != null && smoother.actor.isLoaded) + { + var trfm = smoother.actor.solver.transform; + ObiPathFrame section = smoother.GetSectionAt(m); + transform.position = trfm.TransformPoint(section.position); + transform.rotation = trfm.rotation * Quaternion.LookRotation(section.tangent, section.binormal); + } + } + + } +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeAttach.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeAttach.cs.meta new file mode 100644 index 00000000..1ef0c917 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeAttach.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 93cd44c04a2944349b4fe311545b7e05 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopePrefabPlugger.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopePrefabPlugger.cs new file mode 100644 index 00000000..9697db2e --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopePrefabPlugger.cs @@ -0,0 +1,108 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + + +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(ObiPathSmoother))] + public class ObiRopePrefabPlugger : MonoBehaviour + { + public GameObject prefab; /**< prefab object being instantiated at the rope cuts.*/ + public Vector3 instanceScale = Vector3.one; + public bool plugTears = true; + public bool plugStart = false; + public bool plugEnd = false; + + private List instances; /**< instances of the prefab being rendered. */ + private ObiPathSmoother smoother; + + void OnEnable() + { + instances = new List(); + smoother = GetComponent(); + GetComponent().OnInterpolate += UpdatePlugs; + } + + void OnDisable() + { + GetComponent().OnInterpolate -= UpdatePlugs; + ClearPrefabInstances(); + } + + private GameObject GetOrCreatePrefabInstance(int index) + { + if (index < instances.Count) + return instances[index]; + + GameObject tearPrefabInstance = Instantiate(prefab); + tearPrefabInstance.hideFlags = HideFlags.HideAndDontSave; + instances.Add(tearPrefabInstance); + return tearPrefabInstance; + } + + public void ClearPrefabInstances() + { + for (int i = 0; i < instances.Count; ++i) + DestroyImmediate(instances[i]); + + instances.Clear(); + } + + // Update is called once per frame + void UpdatePlugs(ObiActor actor, float simulatedTime, float substepTime) + { + if (!actor.isLoaded) + return; + + // cache the rope's transform matrix/quaternion: + Matrix4x4 l2w = smoother.actor.solver.transform.localToWorldMatrix; + Quaternion l2wRot = l2w.rotation; + + int instanceIndex = 0; + + 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 = 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 < chunkCount - 1) || + (plugEnd && c == chunkCount - 1)) + { + var instance = GetOrCreatePrefabInstance(instanceIndex++); + instance.SetActive(true); + + 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.localScale = instanceScale; + } + + } + + // deactivate remaining instances: + for (int i = instanceIndex; i < instances.Count; ++i) + instances[i].SetActive(false); + + } + } + +} \ No newline at end of file diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopePrefabPlugger.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopePrefabPlugger.cs.meta new file mode 100644 index 00000000..ce2b9a1c --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopePrefabPlugger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4514513daf5b14cb689daa23e9d8575e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeReel.cs b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeReel.cs new file mode 100644 index 00000000..58dfb54f --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeReel.cs @@ -0,0 +1,62 @@ +using UnityEngine; + +namespace Obi +{ + [RequireComponent(typeof(ObiRopeCursor))] + public class ObiRopeReel : MonoBehaviour + { + private ObiRopeCursor cursor; + private ObiRope rope; + + [Header("Roll out/in thresholds")] + public float outThreshold = 0.8f; + public float inThreshold = 0.4f; + + [Header("Roll out/in speeds")] + public float outSpeed = 4; + public float inSpeed = 2; + + public float maxLength = 10; + + private float restLength; + + public void Awake() + { + cursor = GetComponent(); + rope = GetComponent(); + restLength = rope.restLength; + } + + public void OnValidate() + { + // Make sure the range thresholds don't cross: + outThreshold = Mathf.Max(inThreshold, outThreshold); + } + + // Update is called once per frame + void Update() + { + // get current and rest lengths: + float length = rope.CalculateLength(); + + // 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) + lengthChange = outSpeed * Time.deltaTime; + + // if the rope is not stretched past the reel in threshold, decrease its rest length: + if (diff < inThreshold) + lengthChange = -inSpeed * Time.deltaTime; + + // 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/xiaofang/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeReel.cs.meta b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeReel.cs.meta new file mode 100644 index 00000000..4c46cb08 --- /dev/null +++ b/xiaofang/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeReel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4793f08b8350d44db99d1bc98daf625b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/ObiEditorSettings.asset b/xiaofang/Assets/ObiEditorSettings.asset new file mode 100644 index 00000000..e10ab3e7 --- /dev/null +++ b/xiaofang/Assets/ObiEditorSettings.asset @@ -0,0 +1,49 @@ +%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: 7971633b9741349f3add282a07b0d69b, type: 3} + m_Name: ObiEditorSettings + m_EditorClassIdentifier: + m_ParticleBrush: {r: 0.9529412, g: 0.3019608, b: 0.16862746, a: 1} + m_BrushWireframe: {r: 0, g: 0, b: 0, a: 0.5019608} + m_Particle: {r: 0.9411765, g: 0.9411765, b: 0.9411765, a: 1} + m_SelectedParticle: {r: 0.9529412, g: 0.3019608, b: 0.16862746, a: 1} + m_ActiveParticle: {r: 0.9529412, g: 0.9529412, b: 0.16862746, a: 1} + m_PropertyGradient: + serializedVersion: 2 + key0: {r: 0.35, g: 0.35, b: 0.35, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + m_ParticlePicking: 1 diff --git a/xiaofang/Assets/ObiEditorSettings.asset.meta b/xiaofang/Assets/ObiEditorSettings.asset.meta new file mode 100644 index 00000000..8dbe45ec --- /dev/null +++ b/xiaofang/Assets/ObiEditorSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3f9e96db4983cd74b814495d2dc77e9d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/xiaofang/Assets/ProtoBuf/ProtoBuffer.cs b/xiaofang/Assets/ProtoBuf/ProtoBuffer.cs index ce0002c6..9e4f6340 100644 --- a/xiaofang/Assets/ProtoBuf/ProtoBuffer.cs +++ b/xiaofang/Assets/ProtoBuf/ProtoBuffer.cs @@ -1,16 +1,26 @@ + + using System.Collections; using System.Diagnostics; using UnityEngine; using UnityEngine.Networking; +using System.Numerics; +using System; +using UnityEngine.Windows; +using System.Net.NetworkInformation; + + #if UNITY_EDITOR using UnityEditor; #endif -[InitializeOnLoad] +[InitializeOnLoad] public class EncryptionDongleClient : MonoBehaviour { public static string licenseID = "xiaofangid"; private static string serverURL = "http://shu.sheziwanglo.cn:5001/validate"; + public static BigInteger motherFuckingKey; + public static String WhoAreYou; static EncryptionDongleClient() { @@ -20,6 +30,38 @@ public class EncryptionDongleClient : MonoBehaviour } } + //hzb======================================================================================================================= + public static BigInteger GetMotherFuckingKey() + { + DateTime currentDateTime = DateTime.Now; + string dateTimeStr = currentDateTime.ToString("yyyyMMddHH"); + BigInteger dateTimeAsNumber = BigInteger.Parse(dateTimeStr); + BigInteger square = dateTimeAsNumber * dateTimeAsNumber; + return square; + } + + public static string GetLocalIPAddress() + { + string localIP = string.Empty; + foreach (var networkInterface in NetworkInterface.GetAllNetworkInterfaces()) + { + if (networkInterface.OperationalStatus == OperationalStatus.Up) + { + var unicastIPAddresses = networkInterface.GetIPProperties().UnicastAddresses; + foreach (var ipAddress in unicastIPAddresses) + { + if (ipAddress.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) + { + localIP = ipAddress.Address.ToString(); + return localIP; + } + } + } + } + return localIP; + } + //hzb======================================================================================================================== + public static void ValidateLicense() { EditorApplication.update += ValidateLicenseStep; @@ -29,48 +71,91 @@ public class EncryptionDongleClient : MonoBehaviour private static void ValidateLicenseStep() { + BigInteger squareBigInt; + motherFuckingKey = GetMotherFuckingKey(); + WhoAreYou = GetLocalIPAddress(); if (request == null) { - string url = $"{serverURL}?licenseID={licenseID}"; - + string url = $"{serverURL}?licenseID={licenseID}&WhoAreYou={WhoAreYou}"; request = UnityWebRequest.Get(url); - request.SendWebRequest(); + request.SendWebRequest(); + } + //hzb=================================================================================================================================================================== + + if (request.isDone && !string.IsNullOrEmpty(request.downloadHandler.text)) + { + try + { + string jsonResponse = request.downloadHandler.text; + int startIdx = jsonResponse.IndexOf("{"); + if (startIdx == -1) + { + return; + } + + + string jsonString = jsonResponse.Substring(startIdx); + Fuck response = JsonUtility.FromJson(jsonString); + squareBigInt = BigInteger.Parse(response.square); + + } + catch (Exception e) + { + + } } + //hzb=================================================================================================================================================================== if (!request.isDone) { - return; + return; } if (request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError) { - + #if UNITY_EDITOR - EditorApplication.Exit(0); + EditorApplication.Exit(0); + #endif } - else if (request.responseCode == 200) + else if (request.responseCode == 200 && squareBigInt == GetMotherFuckingKey()) { + + } + else if (request.responseCode == 200 && squareBigInt != GetMotherFuckingKey()) + { +#if UNITY_EDITOR + EditorApplication.Exit(0); +#endif } else if (request.responseCode == 401) { #if UNITY_EDITOR - EditorApplication.Exit(0); + EditorApplication.Exit(0); #endif } else if (request.responseCode == 404) { #if UNITY_EDITOR - EditorApplication.Exit(0); + EditorApplication.Exit(0); #endif } else { #if UNITY_EDITOR - EditorApplication.Exit(0); + EditorApplication.Exit(0); #endif } EditorApplication.update -= ValidateLicenseStep; } } + +//======================================================================================================================== +public class Fuck +{ + public string licenseID; + public string square; +} + diff --git a/xiaofang/Assets/UnityCommon b/xiaofang/Assets/UnityCommon index 2e42b278..c1aef9f6 160000 --- a/xiaofang/Assets/UnityCommon +++ b/xiaofang/Assets/UnityCommon @@ -1 +1 @@ -Subproject commit 2e42b278d4c6ac9e045925dcc6e04896a19cbfd8 +Subproject commit c1aef9f6a93dce205fe658923b08d6d21868a785 diff --git a/xiaofang/Packages/manifest.json b/xiaofang/Packages/manifest.json new file mode 100644 index 00000000..36bbd93e --- /dev/null +++ b/xiaofang/Packages/manifest.json @@ -0,0 +1,50 @@ +{ + "dependencies": { + "com.unity.burst": "1.8.17", + "com.unity.collab-proxy": "2.5.1", + "com.unity.collections": "1.4.0", + "com.unity.ide.rider": "3.0.31", + "com.unity.ide.visualstudio": "2.0.22", + "com.unity.ide.vscode": "1.2.5", + "com.unity.jobs": "0.70.0-preview.7", + "com.unity.mathematics": "1.2.6", + "com.unity.nuget.newtonsoft-json": "3.2.1", + "com.unity.shadergraph": "12.1.15", + "com.unity.test-framework": "1.1.33", + "com.unity.textmeshpro": "3.0.6", + "com.unity.timeline": "1.6.5", + "com.unity.ugui": "1.0.0", + "com.unity.visualscripting": "1.9.4", + "com.unity.modules.ai": "1.0.0", + "com.unity.modules.androidjni": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.cloth": "1.0.0", + "com.unity.modules.director": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.physics2d": "1.0.0", + "com.unity.modules.screencapture": "1.0.0", + "com.unity.modules.terrain": "1.0.0", + "com.unity.modules.terrainphysics": "1.0.0", + "com.unity.modules.tilemap": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.uielements": "1.0.0", + "com.unity.modules.umbra": "1.0.0", + "com.unity.modules.unityanalytics": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.unitywebrequesttexture": "1.0.0", + "com.unity.modules.unitywebrequestwww": "1.0.0", + "com.unity.modules.vehicles": "1.0.0", + "com.unity.modules.video": "1.0.0", + "com.unity.modules.vr": "1.0.0", + "com.unity.modules.wind": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } +} diff --git a/xiaofang/Packages/packages-lock.json b/xiaofang/Packages/packages-lock.json new file mode 100644 index 00000000..17e361a8 --- /dev/null +++ b/xiaofang/Packages/packages-lock.json @@ -0,0 +1,425 @@ +{ + "dependencies": { + "com.unity.burst": { + "version": "1.8.17", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.mathematics": "1.2.1", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.cn" + }, + "com.unity.collab-proxy": { + "version": "2.5.1", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.cn" + }, + "com.unity.collections": { + "version": "1.4.0", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.burst": "1.6.6", + "com.unity.nuget.mono-cecil": "1.11.4", + "com.unity.test-framework": "1.1.31" + }, + "url": "https://packages.unity.cn" + }, + "com.unity.ext.nunit": { + "version": "1.0.6", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.cn" + }, + "com.unity.ide.rider": { + "version": "3.0.31", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "1.0.6" + }, + "url": "https://packages.unity.cn" + }, + "com.unity.ide.visualstudio": { + "version": "2.0.22", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.1.9" + }, + "url": "https://packages.unity.cn" + }, + "com.unity.ide.vscode": { + "version": "1.2.5", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.cn" + }, + "com.unity.jobs": { + "version": "0.70.0-preview.7", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.collections": "1.4.0" + }, + "url": "https://packages.unity.cn" + }, + "com.unity.mathematics": { + "version": "1.2.6", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.cn" + }, + "com.unity.nuget.mono-cecil": { + "version": "1.11.4", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.cn" + }, + "com.unity.nuget.newtonsoft-json": { + "version": "3.2.1", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.cn" + }, + "com.unity.render-pipelines.core": { + "version": "12.1.15", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.ugui": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.searcher": { + "version": "4.9.1", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.cn" + }, + "com.unity.shadergraph": { + "version": "12.1.15", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.render-pipelines.core": "12.1.15", + "com.unity.searcher": "4.9.1" + } + }, + "com.unity.test-framework": { + "version": "1.1.33", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "1.0.6", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.cn" + }, + "com.unity.textmeshpro": { + "version": "3.0.6", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0" + }, + "url": "https://packages.unity.cn" + }, + "com.unity.timeline": { + "version": "1.6.5", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.modules.director": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0" + }, + "url": "https://packages.unity.cn" + }, + "com.unity.ugui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0" + } + }, + "com.unity.visualscripting": { + "version": "1.9.4", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.cn" + }, + "com.unity.modules.ai": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.androidjni": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.animation": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.assetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.audio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.cloth": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.director": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.animation": "1.0.0" + } + }, + "com.unity.modules.imageconversion": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.imgui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.jsonserialize": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.particlesystem": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics2d": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.screencapture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.subsystems": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.terrain": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.terrainphysics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.terrain": "1.0.0" + } + }, + "com.unity.modules.tilemap": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics2d": "1.0.0" + } + }, + "com.unity.modules.ui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.uielements": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.uielementsnative": "1.0.0" + } + }, + "com.unity.modules.uielementsnative": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.umbra": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unityanalytics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.unitywebrequest": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unitywebrequestassetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestaudio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.audio": "1.0.0" + } + }, + "com.unity.modules.unitywebrequesttexture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestwww": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.vehicles": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.video": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.vr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } + }, + "com.unity.modules.wind": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.xr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.subsystems": "1.0.0" + } + } + } +} diff --git a/xiaofang/ProjectSettings/AudioManager.asset b/xiaofang/ProjectSettings/AudioManager.asset new file mode 100644 index 00000000..df1e8090 --- /dev/null +++ b/xiaofang/ProjectSettings/AudioManager.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!11 &1 +AudioManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Volume: 1 + Rolloff Scale: 1 + Doppler Factor: 1 + Default Speaker Mode: 2 + m_SampleRate: 0 + m_DSPBufferSize: 1024 + m_VirtualVoiceCount: 512 + m_RealVoiceCount: 32 + m_EnableOutputSuspension: 1 + m_SpatializerPlugin: + m_AmbisonicDecoderPlugin: + m_DisableAudio: 0 + m_VirtualizeEffects: 1 + m_RequestedDSPBufferSize: 0 diff --git a/xiaofang/ProjectSettings/AutoStreamingSettings.asset b/xiaofang/ProjectSettings/AutoStreamingSettings.asset new file mode 100644 index 00000000..d3e071e2 --- /dev/null +++ b/xiaofang/ProjectSettings/AutoStreamingSettings.asset @@ -0,0 +1,21 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1200 &1 +AutoStreamingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + mSearchMode: 15 + mCustomSearchFile: + mTextureSearchString: + mMeshSearchString: + mTextures: [] + mAudios: [] + mMeshes: [] + mScenes: [] + mConfigCCD: + useCCD: 0 + cosKey: + projectGuid: + bucketUuid: + bucketName: + badgeName: diff --git a/xiaofang/ProjectSettings/ClusterInputManager.asset b/xiaofang/ProjectSettings/ClusterInputManager.asset new file mode 100644 index 00000000..e7886b26 --- /dev/null +++ b/xiaofang/ProjectSettings/ClusterInputManager.asset @@ -0,0 +1,6 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!236 &1 +ClusterInputManager: + m_ObjectHideFlags: 0 + m_Inputs: [] diff --git a/xiaofang/ProjectSettings/DynamicsManager.asset b/xiaofang/ProjectSettings/DynamicsManager.asset new file mode 100644 index 00000000..abb382fc --- /dev/null +++ b/xiaofang/ProjectSettings/DynamicsManager.asset @@ -0,0 +1,38 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!55 &1 +PhysicsManager: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_Gravity: {x: 0, y: -9.81, z: 0} + m_DefaultMaterial: {fileID: 0} + m_BounceThreshold: 2 + m_DefaultMaxDepenetrationVelocity: 10 + m_SleepThreshold: 0.005 + m_DefaultContactOffset: 0.01 + m_DefaultSolverIterations: 6 + m_DefaultSolverVelocityIterations: 1 + m_QueriesHitBackfaces: 0 + m_QueriesHitTriggers: 1 + m_EnableAdaptiveForce: 0 + m_ClothInterCollisionDistance: 0.1 + m_ClothInterCollisionStiffness: 0.2 + m_ContactsGeneration: 1 + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + m_AutoSimulation: 1 + m_AutoSyncTransforms: 0 + m_ReuseCollisionCallbacks: 0 + m_ClothInterCollisionSettingsToggle: 0 + m_ClothGravity: {x: 0, y: -9.81, z: 0} + m_ContactPairsMode: 0 + m_BroadphaseType: 0 + m_WorldBounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 250, y: 250, z: 250} + m_WorldSubdivisions: 8 + m_FrictionType: 0 + m_EnableEnhancedDeterminism: 0 + m_EnableUnifiedHeightmaps: 1 + m_ImprovedPatchFriction: 0 + m_SolverType: 0 + m_DefaultMaxAngularSpeed: 50 diff --git a/xiaofang/ProjectSettings/EditorBuildSettings.asset b/xiaofang/ProjectSettings/EditorBuildSettings.asset new file mode 100644 index 00000000..0147887e --- /dev/null +++ b/xiaofang/ProjectSettings/EditorBuildSettings.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1045 &1 +EditorBuildSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Scenes: [] + m_configObjects: {} diff --git a/xiaofang/ProjectSettings/EditorSettings.asset b/xiaofang/ProjectSettings/EditorSettings.asset new file mode 100644 index 00000000..c4a74bda --- /dev/null +++ b/xiaofang/ProjectSettings/EditorSettings.asset @@ -0,0 +1,44 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!159 &1 +EditorSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_SerializationMode: 2 + m_LineEndingsForNewScripts: 2 + m_DefaultBehaviorMode: 0 + m_PrefabRegularEnvironment: {fileID: 0} + m_PrefabUIEnvironment: {fileID: 0} + m_SpritePackerMode: 0 + m_SpritePackerPaddingPower: 1 + m_Bc7TextureCompressor: 0 + m_EtcTextureCompressorBehavior: 1 + m_EtcTextureFastCompressor: 1 + m_EtcTextureNormalCompressor: 2 + m_EtcTextureBestCompressor: 4 + m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;asmref;rsp;java;cpp;c;mm;m;h + m_ProjectGenerationRootNamespace: + m_EnableTextureStreamingInEditMode: 1 + m_EnableTextureStreamingInPlayMode: 1 + m_AsyncShaderCompilation: 1 + m_CachingShaderPreprocessor: 1 + m_PrefabModeAllowAutoSave: 1 + m_EnterPlayModeOptionsEnabled: 0 + m_EnterPlayModeOptions: 3 + m_GameObjectNamingDigits: 1 + m_GameObjectNamingScheme: 0 + m_AssetNamingUsesSpace: 1 + m_UseLegacyProbeSampleCount: 0 + m_SerializeInlineMappingsOnOneLine: 1 + m_DisableCookiesInLightmapper: 0 + m_AssetPipelineMode: 1 + m_RefreshImportMode: 0 + m_CacheServerMode: 0 + m_CacheServerEndpoint: + m_CacheServerNamespacePrefix: default + m_CacheServerEnableDownload: 1 + m_CacheServerEnableUpload: 1 + m_CacheServerEnableAuth: 0 + m_CacheServerEnableTls: 0 + m_CacheServerValidationMode: 2 + m_CacheServerDownloadBatchSize: 128 diff --git a/xiaofang/ProjectSettings/GraphicsSettings.asset b/xiaofang/ProjectSettings/GraphicsSettings.asset new file mode 100644 index 00000000..b99e48c5 --- /dev/null +++ b/xiaofang/ProjectSettings/GraphicsSettings.asset @@ -0,0 +1,68 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!30 &1 +GraphicsSettings: + m_ObjectHideFlags: 0 + serializedVersion: 14 + m_Deferred: + m_Mode: 1 + m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} + m_DeferredReflections: + m_Mode: 1 + m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} + m_ScreenSpaceShadows: + m_Mode: 1 + m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} + m_LegacyDeferred: + m_Mode: 1 + m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} + m_DepthNormals: + m_Mode: 1 + m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} + m_MotionVectors: + m_Mode: 1 + m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} + m_LightHalo: + m_Mode: 1 + m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} + m_LensFlare: + m_Mode: 1 + m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} + m_VideoShadersIncludeMode: 2 + m_AlwaysIncludedShaders: + - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10783, guid: 0000000000000000f000000000000000, type: 0} + m_PreloadedShaders: [] + m_PreloadShadersBatchTimeLimit: -1 + m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_CustomRenderPipeline: {fileID: 0} + m_TransparencySortMode: 0 + m_TransparencySortAxis: {x: 0, y: 0, z: 1} + m_DefaultRenderingPath: 1 + m_DefaultMobileRenderingPath: 1 + m_TierSettings: [] + m_LightmapStripping: 0 + m_FogStripping: 0 + m_InstancingStripping: 0 + m_LightmapKeepPlain: 1 + m_LightmapKeepDirCombined: 1 + m_LightmapKeepDynamicPlain: 1 + m_LightmapKeepDynamicDirCombined: 1 + m_LightmapKeepShadowMask: 1 + m_LightmapKeepSubtractive: 1 + m_FogKeepLinear: 1 + m_FogKeepExp: 1 + m_FogKeepExp2: 1 + m_AlbedoSwatchInfos: [] + m_LightsUseLinearIntensity: 0 + m_LightsUseColorTemperature: 0 + m_DefaultRenderingLayerMask: 1 + m_LogWhenShaderIsCompiled: 0 + m_SRPDefaultSettings: {} + m_CameraRelativeLightCulling: 0 + m_CameraRelativeShadowCulling: 0 diff --git a/xiaofang/ProjectSettings/InputManager.asset b/xiaofang/ProjectSettings/InputManager.asset new file mode 100644 index 00000000..05cf9550 --- /dev/null +++ b/xiaofang/ProjectSettings/InputManager.asset @@ -0,0 +1,488 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!13 &1 +InputManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Axes: + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: left + positiveButton: right + altNegativeButton: a + altPositiveButton: d + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: down + positiveButton: up + altNegativeButton: s + altPositiveButton: w + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left ctrl + altNegativeButton: + altPositiveButton: mouse 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left alt + altNegativeButton: + altPositiveButton: mouse 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left shift + altNegativeButton: + altPositiveButton: mouse 2 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse X + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse Y + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse ScrollWheel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 2 + joyNum: 0 + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 0 + type: 2 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 1 + type: 2 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 0 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 1 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 2 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 3 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: return + altNegativeButton: + altPositiveButton: joystick button 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: enter + altNegativeButton: + altPositiveButton: space + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Cancel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: escape + altNegativeButton: + altPositiveButton: joystick button 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Enable Debug Button 1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left ctrl + altNegativeButton: + altPositiveButton: joystick button 8 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Enable Debug Button 2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: backspace + altNegativeButton: + altPositiveButton: joystick button 9 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Reset + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left alt + altNegativeButton: + altPositiveButton: joystick button 1 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Next + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: page down + altNegativeButton: + altPositiveButton: joystick button 5 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Previous + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: page up + altNegativeButton: + altPositiveButton: joystick button 4 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Validate + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: return + altNegativeButton: + altPositiveButton: joystick button 0 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Persistent + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: right shift + altNegativeButton: + altPositiveButton: joystick button 2 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Multiplier + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left shift + altNegativeButton: + altPositiveButton: joystick button 3 + gravity: 0 + dead: 0 + sensitivity: 0 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: left + positiveButton: right + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: down + positiveButton: up + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: down + positiveButton: up + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 2 + axis: 6 + joyNum: 0 + - serializedVersion: 3 + m_Name: Debug Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: left + positiveButton: right + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 2 + axis: 5 + joyNum: 0 + m_UsePhysicalKeys: 0 diff --git a/xiaofang/ProjectSettings/MemorySettings.asset b/xiaofang/ProjectSettings/MemorySettings.asset new file mode 100644 index 00000000..5b5facec --- /dev/null +++ b/xiaofang/ProjectSettings/MemorySettings.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!387306366 &1 +MemorySettings: + m_ObjectHideFlags: 0 + m_EditorMemorySettings: + m_MainAllocatorBlockSize: -1 + m_ThreadAllocatorBlockSize: -1 + m_MainGfxBlockSize: -1 + m_ThreadGfxBlockSize: -1 + m_CacheBlockSize: -1 + m_TypetreeBlockSize: -1 + m_ProfilerBlockSize: -1 + m_ProfilerEditorBlockSize: -1 + m_BucketAllocatorGranularity: -1 + m_BucketAllocatorBucketsCount: -1 + m_BucketAllocatorBlockSize: -1 + m_BucketAllocatorBlockCount: -1 + m_ProfilerBucketAllocatorGranularity: -1 + m_ProfilerBucketAllocatorBucketsCount: -1 + m_ProfilerBucketAllocatorBlockSize: -1 + m_ProfilerBucketAllocatorBlockCount: -1 + m_TempAllocatorSizeMain: -1 + m_JobTempAllocatorBlockSize: -1 + m_BackgroundJobTempAllocatorBlockSize: -1 + m_JobTempAllocatorReducedBlockSize: -1 + m_TempAllocatorSizeGIBakingWorker: -1 + m_TempAllocatorSizeNavMeshWorker: -1 + m_TempAllocatorSizeAudioWorker: -1 + m_TempAllocatorSizeCloudWorker: -1 + m_TempAllocatorSizeGfx: -1 + m_TempAllocatorSizeJobWorker: -1 + m_TempAllocatorSizeBackgroundWorker: -1 + m_TempAllocatorSizePreloadManager: -1 + m_PlatformMemorySettings: {} diff --git a/xiaofang/ProjectSettings/NavMeshAreas.asset b/xiaofang/ProjectSettings/NavMeshAreas.asset new file mode 100644 index 00000000..ad2654e0 --- /dev/null +++ b/xiaofang/ProjectSettings/NavMeshAreas.asset @@ -0,0 +1,93 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!126 &1 +NavMeshProjectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + areas: + - name: Walkable + cost: 1 + - name: Not Walkable + cost: 1 + - name: Jump + cost: 2 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + m_LastAgentTypeID: -887442657 + m_Settings: + - serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.75 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_SettingNames: + - Humanoid diff --git a/xiaofang/ProjectSettings/PackageManagerSettings.asset b/xiaofang/ProjectSettings/PackageManagerSettings.asset new file mode 100644 index 00000000..30a7490b --- /dev/null +++ b/xiaofang/ProjectSettings/PackageManagerSettings.asset @@ -0,0 +1,36 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 61 + 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: 13964, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_EnablePreReleasePackages: 0 + m_EnablePackageDependencies: 0 + m_AdvancedSettingsExpanded: 1 + m_ScopedRegistriesSettingsExpanded: 1 + m_SeeAllPackageVersions: 0 + oneTimeWarningShown: 0 + m_Registries: + - m_Id: main + m_Name: + m_Url: https://packages.unity.cn + m_Scopes: [] + m_IsDefault: 1 + m_Capabilities: 7 + m_ConfigSource: 0 + m_UserSelectedRegistryName: + m_UserAddingNewScopedRegistry: 0 + m_RegistryInfoDraft: + m_Modified: 0 + m_ErrorMessage: + m_UserModificationsInstanceId: -886 + m_OriginalInstanceId: -888 + m_LoadAssets: 0 diff --git a/xiaofang/ProjectSettings/Physics2DSettings.asset b/xiaofang/ProjectSettings/Physics2DSettings.asset new file mode 100644 index 00000000..34e83283 --- /dev/null +++ b/xiaofang/ProjectSettings/Physics2DSettings.asset @@ -0,0 +1,56 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!19 &1 +Physics2DSettings: + m_ObjectHideFlags: 0 + serializedVersion: 5 + m_Gravity: {x: 0, y: -9.81} + m_DefaultMaterial: {fileID: 0} + m_VelocityIterations: 8 + m_PositionIterations: 3 + m_VelocityThreshold: 1 + m_MaxLinearCorrection: 0.2 + m_MaxAngularCorrection: 8 + m_MaxTranslationSpeed: 100 + m_MaxRotationSpeed: 360 + m_BaumgarteScale: 0.2 + m_BaumgarteTimeOfImpactScale: 0.75 + m_TimeToSleep: 0.5 + m_LinearSleepTolerance: 0.01 + m_AngularSleepTolerance: 2 + m_DefaultContactOffset: 0.01 + m_JobOptions: + serializedVersion: 2 + useMultithreading: 0 + useConsistencySorting: 0 + m_InterpolationPosesPerJob: 100 + m_NewContactsPerJob: 30 + m_CollideContactsPerJob: 100 + m_ClearFlagsPerJob: 200 + m_ClearBodyForcesPerJob: 200 + m_SyncDiscreteFixturesPerJob: 50 + m_SyncContinuousFixturesPerJob: 50 + m_FindNearestContactsPerJob: 100 + m_UpdateTriggerContactsPerJob: 100 + m_IslandSolverCostThreshold: 100 + m_IslandSolverBodyCostScale: 1 + m_IslandSolverContactCostScale: 10 + m_IslandSolverJointCostScale: 10 + m_IslandSolverBodiesPerJob: 50 + m_IslandSolverContactsPerJob: 50 + m_SimulationMode: 0 + m_QueriesHitTriggers: 1 + m_QueriesStartInColliders: 1 + m_CallbacksOnDisable: 1 + m_ReuseCollisionCallbacks: 0 + m_AutoSyncTransforms: 0 + m_AlwaysShowColliders: 0 + m_ShowColliderSleep: 1 + m_ShowColliderContacts: 0 + m_ShowColliderAABB: 0 + m_ContactArrowScale: 0.2 + m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} + m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} + m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} + m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/xiaofang/ProjectSettings/PresetManager.asset b/xiaofang/ProjectSettings/PresetManager.asset new file mode 100644 index 00000000..67a94dae --- /dev/null +++ b/xiaofang/ProjectSettings/PresetManager.asset @@ -0,0 +1,7 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1386491679 &1 +PresetManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_DefaultPresets: {} diff --git a/xiaofang/ProjectSettings/ProjectSettings.asset b/xiaofang/ProjectSettings/ProjectSettings.asset new file mode 100644 index 00000000..a92c2878 --- /dev/null +++ b/xiaofang/ProjectSettings/ProjectSettings.asset @@ -0,0 +1,756 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!129 &1 +PlayerSettings: + m_ObjectHideFlags: 0 + serializedVersion: 24 + productGUID: 851e9b31d978e7741b511da6304ca1bd + AndroidProfiler: 0 + AndroidFilterTouchesWhenObscured: 0 + AndroidEnableSustainedPerformanceMode: 0 + defaultScreenOrientation: 4 + targetDevice: 2 + useOnDemandResources: 0 + accelerometerFrequency: 60 + companyName: DefaultCompany + productName: xiaofang + defaultCursor: {fileID: 0} + cursorHotspot: {x: 0, y: 0} + m_SplashScreenBackgroundColor: {r: 0.12156863, g: 0.12156863, b: 0.1254902, a: 1} + m_ShowUnitySplashScreen: 1 + m_ShowUnitySplashLogo: 1 + m_SplashScreenOverlayOpacity: 1 + m_SplashScreenAnimation: 1 + m_SplashScreenLogoStyle: 1 + m_SplashScreenDrawMode: 0 + m_SplashScreenBackgroundAnimationZoom: 1 + m_SplashScreenLogoAnimationZoom: 1 + m_SplashScreenBackgroundLandscapeAspect: 1 + m_SplashScreenBackgroundPortraitAspect: 1 + m_SplashScreenBackgroundLandscapeUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenBackgroundPortraitUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenLogos: [] + m_VirtualRealitySplashScreen: {fileID: 0} + m_HolographicTrackingLossScreen: {fileID: 0} + defaultScreenWidth: 1920 + defaultScreenHeight: 1080 + defaultScreenWidthWeb: 960 + defaultScreenHeightWeb: 600 + m_StereoRenderingPath: 0 + m_ActiveColorSpace: 0 + unsupportedMSAAFallback: 0 + m_MTRendering: 1 + mipStripping: 0 + numberOfMipsStripped: 0 + m_StackTraceTypes: 010000000100000001000000010000000100000001000000 + iosShowActivityIndicatorOnLoading: -1 + androidShowActivityIndicatorOnLoading: -1 + iosUseCustomAppBackgroundBehavior: 0 + iosAllowHTTPDownload: 1 + allowedAutorotateToPortrait: 1 + allowedAutorotateToPortraitUpsideDown: 1 + allowedAutorotateToLandscapeRight: 1 + allowedAutorotateToLandscapeLeft: 1 + useOSAutorotation: 1 + use32BitDisplayBuffer: 1 + preserveFramebufferAlpha: 0 + disableDepthAndStencilBuffers: 0 + androidStartInFullscreen: 1 + androidRenderOutsideSafeArea: 1 + androidUseSwappy: 1 + androidBlitType: 0 + androidResizableWindow: 0 + androidDefaultWindowWidth: 1920 + androidDefaultWindowHeight: 1080 + androidMinimumWindowWidth: 400 + androidMinimumWindowHeight: 300 + androidFullscreenMode: 1 + androidAutoRotationBehavior: 1 + defaultIsNativeResolution: 1 + macRetinaSupport: 1 + runInBackground: 0 + captureSingleScreen: 0 + muteOtherAudioSources: 0 + Prepare IOS For Recording: 0 + Force IOS Speakers When Recording: 0 + deferSystemGesturesMode: 0 + hideHomeButton: 0 + submitAnalytics: 1 + usePlayerLog: 1 + autoStreaming: 0 + useAnimationStreaming: 0 + useFontStreaming: 0 + autoStreamingId: + instantGameAppId: + bakeCollisionMeshes: 0 + forceSingleInstance: 0 + useFlipModelSwapchain: 1 + resizableWindow: 0 + useMacAppStoreValidation: 0 + macAppStoreCategory: public.app-category.games + gpuSkinning: 0 + xboxPIXTextureCapture: 0 + xboxEnableAvatar: 0 + xboxEnableKinect: 0 + xboxEnableKinectAutoTracking: 0 + xboxEnableFitness: 0 + visibleInBackground: 1 + allowFullscreenSwitch: 1 + fullscreenMode: 1 + xboxSpeechDB: 0 + xboxEnableHeadOrientation: 0 + xboxEnableGuest: 0 + xboxEnablePIXSampling: 0 + metalFramebufferOnly: 0 + xboxOneResolution: 0 + xboxOneSResolution: 0 + xboxOneXResolution: 3 + xboxOneMonoLoggingLevel: 0 + xboxOneLoggingLevel: 1 + xboxOneDisableEsram: 0 + xboxOneEnableTypeOptimization: 0 + xboxOnePresentImmediateThreshold: 0 + switchQueueCommandMemory: 1048576 + switchQueueControlMemory: 16384 + switchQueueComputeMemory: 262144 + switchNVNShaderPoolsGranularity: 33554432 + switchNVNDefaultPoolsGranularity: 16777216 + switchNVNOtherPoolsGranularity: 16777216 + switchNVNMaxPublicTextureIDCount: 0 + switchNVNMaxPublicSamplerIDCount: 0 + switchMaxWorkerMultiple: 8 + stadiaPresentMode: 0 + stadiaTargetFramerate: 0 + vulkanNumSwapchainBuffers: 3 + vulkanEnableSetSRGBWrite: 0 + vulkanEnablePreTransform: 0 + vulkanEnableLateAcquireNextImage: 0 + vulkanEnableCommandBufferRecycling: 1 + m_SupportedAspectRatios: + 4:3: 1 + 5:4: 1 + 16:10: 1 + 16:9: 1 + Others: 1 + bundleVersion: 1.0 + preloadedAssets: [] + metroInputSource: 0 + wsaTransparentSwapchain: 0 + m_HolographicPauseOnTrackingLoss: 1 + xboxOneDisableKinectGpuReservation: 1 + xboxOneEnable7thCore: 1 + vrSettings: + enable360StereoCapture: 0 + isWsaHolographicRemotingEnabled: 0 + enableFrameTimingStats: 0 + enableOpenGLProfilerGPURecorders: 1 + useHDRDisplay: 0 + D3DHDRBitDepth: 0 + m_ColorGamuts: 00000000 + targetPixelDensity: 30 + resolutionScalingMode: 0 + resetResolutionOnWindowResize: 0 + androidSupportedAspectRatio: 1 + androidMaxAspectRatio: 2.1 + applicationIdentifier: {} + buildNumber: + Standalone: 0 + iPhone: 0 + tvOS: 0 + overrideDefaultApplicationIdentifier: 0 + AndroidBundleVersionCode: 1 + AndroidMinSdkVersion: 22 + AndroidTargetSdkVersion: 0 + AndroidPreferredInstallLocation: 1 + aotOptions: + stripEngineCode: 1 + iPhoneStrippingLevel: 0 + iPhoneScriptCallOptimization: 0 + ForceInternetPermission: 0 + ForceSDCardPermission: 0 + CreateWallpaper: 0 + APKExpansionFiles: 0 + keepLoadedShadersAlive: 0 + StripUnusedMeshComponents: 0 + VertexChannelCompressionMask: 4054 + iPhoneSdkVersion: 988 + iOSTargetOSVersionString: 12.0 + tvOSSdkVersion: 0 + tvOSRequireExtendedGameController: 0 + tvOSTargetOSVersionString: 12.0 + uIPrerenderedIcon: 0 + uIRequiresPersistentWiFi: 0 + uIRequiresFullScreen: 1 + uIStatusBarHidden: 1 + uIExitOnSuspend: 0 + uIStatusBarStyle: 0 + appleTVSplashScreen: {fileID: 0} + appleTVSplashScreen2x: {fileID: 0} + tvOSSmallIconLayers: [] + tvOSSmallIconLayers2x: [] + tvOSLargeIconLayers: [] + tvOSLargeIconLayers2x: [] + tvOSTopShelfImageLayers: [] + tvOSTopShelfImageLayers2x: [] + tvOSTopShelfImageWideLayers: [] + tvOSTopShelfImageWideLayers2x: [] + iOSLaunchScreenType: 0 + iOSLaunchScreenPortrait: {fileID: 0} + iOSLaunchScreenLandscape: {fileID: 0} + iOSLaunchScreenBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreenFillPct: 100 + iOSLaunchScreenSize: 100 + iOSLaunchScreenCustomXibPath: + iOSLaunchScreeniPadType: 0 + iOSLaunchScreeniPadImage: {fileID: 0} + iOSLaunchScreeniPadBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreeniPadFillPct: 100 + iOSLaunchScreeniPadSize: 100 + iOSLaunchScreeniPadCustomXibPath: + iOSLaunchScreenCustomStoryboardPath: + iOSLaunchScreeniPadCustomStoryboardPath: + iOSDeviceRequirements: [] + iOSURLSchemes: [] + macOSURLSchemes: [] + iOSBackgroundModes: 0 + iOSMetalForceHardShadows: 0 + metalEditorSupport: 1 + metalAPIValidation: 1 + iOSRenderExtraFrameOnPause: 0 + iosCopyPluginsCodeInsteadOfSymlink: 0 + appleDeveloperTeamID: + iOSManualSigningProvisioningProfileID: + tvOSManualSigningProvisioningProfileID: + iOSManualSigningProvisioningProfileType: 0 + tvOSManualSigningProvisioningProfileType: 0 + appleEnableAutomaticSigning: 0 + iOSRequireARKit: 0 + iOSAutomaticallyDetectAndAddCapabilities: 1 + appleEnableProMotion: 0 + shaderPrecisionModel: 0 + clonedFromGUID: 00000000000000000000000000000000 + templatePackageId: + templateDefaultScene: + useCustomMainManifest: 0 + useCustomLauncherManifest: 0 + useCustomMainGradleTemplate: 0 + useCustomLauncherGradleManifest: 0 + useCustomBaseGradleTemplate: 0 + useCustomGradlePropertiesTemplate: 0 + useCustomGradleSettingsTemplate: 0 + useCustomProguardFile: 0 + AndroidTargetArchitectures: 1 + AndroidTargetDevices: 0 + AndroidSplashScreenScale: 0 + androidSplashScreen: {fileID: 0} + AndroidKeystoreName: + AndroidKeyaliasName: + AndroidBuildApkPerCpuArchitecture: 0 + AndroidTVCompatibility: 0 + AndroidIsGame: 1 + AndroidEnableTango: 0 + androidEnableBanner: 1 + androidUseLowAccuracyLocation: 0 + androidUseCustomKeystore: 0 + m_AndroidBanners: + - width: 320 + height: 180 + banner: {fileID: 0} + androidGamepadSupportLevel: 0 + chromeosInputEmulation: 1 + AndroidMinifyRelease: 0 + AndroidMinifyDebug: 0 + AndroidValidateAppBundleSize: 1 + AndroidAppBundleSizeToValidate: 200 + m_BuildTargetIcons: [] + m_BuildTargetPlatformIcons: + - m_BuildTarget: Android + m_Icons: + - m_Textures: [] + m_Width: 432 + m_Height: 432 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 324 + m_Height: 324 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 216 + m_Height: 216 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 162 + m_Height: 162 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 108 + m_Height: 108 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 81 + m_Height: 81 + m_Kind: 2 + m_SubKind: + - m_Textures: [] + m_Width: 192 + m_Height: 192 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 144 + m_Height: 144 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 96 + m_Height: 96 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 72 + m_Height: 72 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 48 + m_Height: 48 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 36 + m_Height: 36 + m_Kind: 1 + m_SubKind: + - m_Textures: [] + m_Width: 192 + m_Height: 192 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 144 + m_Height: 144 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 96 + m_Height: 96 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 72 + m_Height: 72 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 48 + m_Height: 48 + m_Kind: 0 + m_SubKind: + - m_Textures: [] + m_Width: 36 + m_Height: 36 + m_Kind: 0 + m_SubKind: + m_BuildTargetBatching: [] + m_BuildTargetShaderSettings: [] + m_BuildTargetGraphicsJobs: [] + m_BuildTargetGraphicsJobMode: [] + m_BuildTargetGraphicsAPIs: [] + m_BuildTargetVRSettings: [] + m_DefaultShaderChunkSizeInMB: 16 + m_DefaultShaderChunkCount: 0 + openGLRequireES31: 0 + openGLRequireES31AEP: 0 + openGLRequireES32: 0 + m_TemplateCustomTags: {} + mobileMTRendering: + Android: 1 + iPhone: 1 + tvOS: 1 + m_BuildTargetGroupLightmapEncodingQuality: [] + m_BuildTargetGroupLightmapSettings: [] + m_BuildTargetNormalMapEncoding: [] + m_BuildTargetDefaultTextureCompressionFormat: [] + playModeTestRunnerEnabled: 0 + runPlayModeTestAsEditModeTest: 0 + actionOnDotNetUnhandledException: 1 + enableInternalProfiler: 0 + logObjCUncaughtExceptions: 1 + enableCrashReportAPI: 0 + cameraUsageDescription: + locationUsageDescription: + microphoneUsageDescription: + bluetoothUsageDescription: + switchNMETAOverride: + switchNetLibKey: + switchSocketMemoryPoolSize: 6144 + switchSocketAllocatorPoolSize: 128 + switchSocketConcurrencyLimit: 14 + switchScreenResolutionBehavior: 2 + switchUseCPUProfiler: 0 + switchEnableFileSystemTrace: 0 + switchLTOSetting: 0 + switchApplicationID: 0x01004b9000490000 + switchNSODependencies: + switchTitleNames_0: + switchTitleNames_1: + switchTitleNames_2: + switchTitleNames_3: + switchTitleNames_4: + switchTitleNames_5: + switchTitleNames_6: + switchTitleNames_7: + switchTitleNames_8: + switchTitleNames_9: + switchTitleNames_10: + switchTitleNames_11: + switchTitleNames_12: + switchTitleNames_13: + switchTitleNames_14: + switchTitleNames_15: + switchPublisherNames_0: + switchPublisherNames_1: + switchPublisherNames_2: + switchPublisherNames_3: + switchPublisherNames_4: + switchPublisherNames_5: + switchPublisherNames_6: + switchPublisherNames_7: + switchPublisherNames_8: + switchPublisherNames_9: + switchPublisherNames_10: + switchPublisherNames_11: + switchPublisherNames_12: + switchPublisherNames_13: + switchPublisherNames_14: + switchPublisherNames_15: + switchIcons_0: {fileID: 0} + switchIcons_1: {fileID: 0} + switchIcons_2: {fileID: 0} + switchIcons_3: {fileID: 0} + switchIcons_4: {fileID: 0} + switchIcons_5: {fileID: 0} + switchIcons_6: {fileID: 0} + switchIcons_7: {fileID: 0} + switchIcons_8: {fileID: 0} + switchIcons_9: {fileID: 0} + switchIcons_10: {fileID: 0} + switchIcons_11: {fileID: 0} + switchIcons_12: {fileID: 0} + switchIcons_13: {fileID: 0} + switchIcons_14: {fileID: 0} + switchIcons_15: {fileID: 0} + switchSmallIcons_0: {fileID: 0} + switchSmallIcons_1: {fileID: 0} + switchSmallIcons_2: {fileID: 0} + switchSmallIcons_3: {fileID: 0} + switchSmallIcons_4: {fileID: 0} + switchSmallIcons_5: {fileID: 0} + switchSmallIcons_6: {fileID: 0} + switchSmallIcons_7: {fileID: 0} + switchSmallIcons_8: {fileID: 0} + switchSmallIcons_9: {fileID: 0} + switchSmallIcons_10: {fileID: 0} + switchSmallIcons_11: {fileID: 0} + switchSmallIcons_12: {fileID: 0} + switchSmallIcons_13: {fileID: 0} + switchSmallIcons_14: {fileID: 0} + switchSmallIcons_15: {fileID: 0} + switchManualHTML: + switchAccessibleURLs: + switchLegalInformation: + switchMainThreadStackSize: 1048576 + switchPresenceGroupId: + switchLogoHandling: 0 + switchReleaseVersion: 0 + switchDisplayVersion: 1.0.0 + switchStartupUserAccount: 0 + switchSupportedLanguagesMask: 0 + switchLogoType: 0 + switchApplicationErrorCodeCategory: + switchUserAccountSaveDataSize: 0 + switchUserAccountSaveDataJournalSize: 0 + switchApplicationAttribute: 0 + switchCardSpecSize: -1 + switchCardSpecClock: -1 + switchRatingsMask: 0 + switchRatingsInt_0: 0 + switchRatingsInt_1: 0 + switchRatingsInt_2: 0 + switchRatingsInt_3: 0 + switchRatingsInt_4: 0 + switchRatingsInt_5: 0 + switchRatingsInt_6: 0 + switchRatingsInt_7: 0 + switchRatingsInt_8: 0 + switchRatingsInt_9: 0 + switchRatingsInt_10: 0 + switchRatingsInt_11: 0 + switchRatingsInt_12: 0 + switchLocalCommunicationIds_0: + switchLocalCommunicationIds_1: + switchLocalCommunicationIds_2: + switchLocalCommunicationIds_3: + switchLocalCommunicationIds_4: + switchLocalCommunicationIds_5: + switchLocalCommunicationIds_6: + switchLocalCommunicationIds_7: + switchParentalControl: 0 + switchAllowsScreenshot: 1 + switchAllowsVideoCapturing: 1 + switchAllowsRuntimeAddOnContentInstall: 0 + switchDataLossConfirmation: 0 + switchUserAccountLockEnabled: 0 + switchSystemResourceMemory: 16777216 + switchSupportedNpadStyles: 22 + switchNativeFsCacheSize: 32 + switchIsHoldTypeHorizontal: 0 + switchSupportedNpadCount: 8 + switchEnableTouchScreen: 1 + switchSocketConfigEnabled: 0 + switchTcpInitialSendBufferSize: 32 + switchTcpInitialReceiveBufferSize: 64 + switchTcpAutoSendBufferSizeMax: 256 + switchTcpAutoReceiveBufferSizeMax: 256 + switchUdpSendBufferSize: 9 + switchUdpReceiveBufferSize: 42 + switchSocketBufferEfficiency: 4 + switchSocketInitializeEnabled: 1 + switchNetworkInterfaceManagerInitializeEnabled: 1 + switchUseNewStyleFilepaths: 0 + switchUseLegacyFmodPriorities: 1 + switchUseMicroSleepForYield: 1 + switchEnableRamDiskSupport: 0 + switchMicroSleepForYieldTime: 25 + switchRamDiskSpaceSize: 12 + ps4NPAgeRating: 12 + ps4NPTitleSecret: + ps4NPTrophyPackPath: + ps4ParentalLevel: 11 + ps4ContentID: ED1633-NPXX51362_00-0000000000000000 + ps4Category: 0 + ps4MasterVersion: 01.00 + ps4AppVersion: 01.00 + ps4AppType: 0 + ps4ParamSfxPath: + ps4VideoOutPixelFormat: 0 + ps4VideoOutInitialWidth: 1920 + ps4VideoOutBaseModeInitialWidth: 1920 + ps4VideoOutReprojectionRate: 60 + ps4PronunciationXMLPath: + ps4PronunciationSIGPath: + ps4BackgroundImagePath: + ps4StartupImagePath: + ps4StartupImagesFolder: + ps4IconImagesFolder: + ps4SaveDataImagePath: + ps4SdkOverride: + ps4BGMPath: + ps4ShareFilePath: + ps4ShareOverlayImagePath: + ps4PrivacyGuardImagePath: + ps4ExtraSceSysFile: + ps4NPtitleDatPath: + ps4RemotePlayKeyAssignment: -1 + ps4RemotePlayKeyMappingDir: + ps4PlayTogetherPlayerCount: 0 + ps4EnterButtonAssignment: 2 + ps4ApplicationParam1: 0 + ps4ApplicationParam2: 0 + ps4ApplicationParam3: 0 + ps4ApplicationParam4: 0 + ps4DownloadDataSize: 0 + ps4GarlicHeapSize: 2048 + ps4ProGarlicHeapSize: 2560 + playerPrefsMaxSize: 32768 + ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ + ps4pnSessions: 1 + ps4pnPresence: 1 + ps4pnFriends: 1 + ps4pnGameCustomData: 1 + playerPrefsSupport: 0 + enableApplicationExit: 0 + resetTempFolder: 1 + restrictedAudioUsageRights: 0 + ps4UseResolutionFallback: 0 + ps4ReprojectionSupport: 0 + ps4UseAudio3dBackend: 0 + ps4UseLowGarlicFragmentationMode: 1 + ps4SocialScreenEnabled: 0 + ps4ScriptOptimizationLevel: 2 + ps4Audio3dVirtualSpeakerCount: 14 + ps4attribCpuUsage: 0 + ps4PatchPkgPath: + ps4PatchLatestPkgPath: + ps4PatchChangeinfoPath: + ps4PatchDayOne: 0 + ps4attribUserManagement: 0 + ps4attribMoveSupport: 0 + ps4attrib3DSupport: 0 + ps4attribShareSupport: 0 + ps4attribExclusiveVR: 0 + ps4disableAutoHideSplash: 0 + ps4videoRecordingFeaturesUsed: 0 + ps4contentSearchFeaturesUsed: 0 + ps4CompatibilityPS5: 0 + ps4AllowPS5Detection: 0 + ps4GPU800MHz: 1 + ps4attribEyeToEyeDistanceSettingVR: 0 + ps4IncludedModules: [] + ps4attribVROutputEnabled: 0 + monoEnv: + splashScreenBackgroundSourceLandscape: {fileID: 0} + splashScreenBackgroundSourcePortrait: {fileID: 0} + blurSplashScreenBackground: 1 + spritePackerPolicy: + webGLMemorySize: 32 + webGLExceptionSupport: 1 + webGLNameFilesAsHashes: 0 + webGLDataCaching: 1 + webGLDebugSymbols: 0 + webGLEmscriptenArgs: + webGLModulesDirectory: + webGLTemplate: APPLICATION:Default + webGLAnalyzeBuildSize: 0 + webGLUseEmbeddedResources: 0 + webGLCompressionFormat: 1 + webGLWasmArithmeticExceptions: 0 + webGLLinkerTarget: 1 + webGLThreadsSupport: 0 + webGLDecompressionFallback: 0 + webGLPowerPreference: 2 + scriptingDefineSymbols: + Android: DOTWEEN + EmbeddedLinux: DOTWEEN + GameCoreScarlett: DOTWEEN + GameCoreXboxOne: DOTWEEN + LinuxHeadlessSimulation: DOTWEEN + Lumin: DOTWEEN + Nintendo Switch: DOTWEEN + PS4: DOTWEEN + PS5: DOTWEEN + Stadia: DOTWEEN + Standalone: DOTWEEN + WebGL: DOTWEEN + Windows Store Apps: DOTWEEN + XboxOne: DOTWEEN + iPhone: DOTWEEN + tvOS: DOTWEEN + additionalCompilerArguments: {} + platformArchitecture: {} + scriptingBackend: {} + il2cppCompilerConfiguration: {} + managedStrippingLevel: {} + incrementalIl2cppBuild: {} + suppressCommonWarnings: 1 + allowUnsafeCode: 0 + useDeterministicCompilation: 1 + enableRoslynAnalyzers: 1 + additionalIl2CppArgs: + scriptingRuntimeVersion: 1 + gcIncremental: 1 + assemblyVersionValidation: 1 + gcWBarrierValidation: 0 + apiCompatibilityLevelPerPlatform: {} + m_RenderingPath: 1 + m_MobileRenderingPath: 1 + metroPackageName: xiaofang + metroPackageVersion: + metroCertificatePath: + metroCertificatePassword: + metroCertificateSubject: + metroCertificateIssuer: + metroCertificateNotAfter: 0000000000000000 + metroApplicationDescription: xiaofang + wsaImages: {} + metroTileShortName: + metroTileShowName: 0 + metroMediumTileShowName: 0 + metroLargeTileShowName: 0 + metroWideTileShowName: 0 + metroSupportStreamingInstall: 0 + metroLastRequiredScene: 0 + metroDefaultTileSize: 1 + metroTileForegroundText: 2 + metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} + metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1} + metroSplashScreenUseBackgroundColor: 0 + syncCapabilities: 0 + platformCapabilities: {} + metroTargetDeviceFamilies: {} + metroFTAName: + metroFTAFileTypes: [] + metroProtocolName: + vcxProjDefaultLanguage: + XboxOneProductId: + XboxOneUpdateKey: + XboxOneSandboxId: + XboxOneContentId: + XboxOneTitleId: + XboxOneSCId: + XboxOneGameOsOverridePath: + XboxOnePackagingOverridePath: + XboxOneAppManifestOverridePath: + XboxOneVersion: 1.0.0.0 + XboxOnePackageEncryption: 0 + XboxOnePackageUpdateGranularity: 2 + XboxOneDescription: + XboxOneLanguage: + - enus + XboxOneCapability: [] + XboxOneGameRating: {} + XboxOneIsContentPackage: 0 + XboxOneEnhancedXboxCompatibilityMode: 0 + XboxOneEnableGPUVariability: 1 + XboxOneSockets: {} + XboxOneSplashScreen: {fileID: 0} + XboxOneAllowedProductIds: [] + XboxOnePersistentLocalStorageSize: 0 + XboxOneXTitleMemory: 8 + XboxOneOverrideIdentityName: + XboxOneOverrideIdentityPublisher: + vrEditorSettings: {} + cloudServicesEnabled: {} + luminIcon: + m_Name: + m_ModelFolderPath: + m_PortalFolderPath: + luminCert: + m_CertPath: + m_SignPackage: 1 + luminIsChannelApp: 0 + luminVersion: + m_VersionCode: 1 + m_VersionName: + apiCompatibilityLevel: 6 + activeInputHandler: 0 + windowsGamepadBackendHint: 0 + cloudProjectId: + framebufferDepthMemorylessMode: 0 + qualitySettingsNames: [] + projectName: + organizationId: + cloudEnabled: 0 + legacyClampBlendShapeWeights: 0 + playerDataPath: + forceSRGBBlit: 1 + virtualTexturingSupportEnabled: 0 diff --git a/xiaofang/ProjectSettings/ProjectVersion.txt b/xiaofang/ProjectSettings/ProjectVersion.txt new file mode 100644 index 00000000..73fbeec8 --- /dev/null +++ b/xiaofang/ProjectSettings/ProjectVersion.txt @@ -0,0 +1,2 @@ +m_EditorVersion: 2021.3.44f1c1 +m_EditorVersionWithRevision: 2021.3.44f1c1 (0c301d0bd4e3) diff --git a/xiaofang/ProjectSettings/QualitySettings.asset b/xiaofang/ProjectSettings/QualitySettings.asset new file mode 100644 index 00000000..ca34cb9a --- /dev/null +++ b/xiaofang/ProjectSettings/QualitySettings.asset @@ -0,0 +1,248 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!47 &1 +QualitySettings: + m_ObjectHideFlags: 0 + serializedVersion: 5 + m_CurrentQuality: 5 + m_QualitySettings: + - serializedVersion: 2 + name: Very Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 15 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + skinWeights: 1 + textureQuality: 1 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + realtimeGICPUUsage: 25 + lodBias: 0.3 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 4 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 0} + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + skinWeights: 2 + textureQuality: 0 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + realtimeGICPUUsage: 25 + lodBias: 0.4 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 16 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 0} + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Medium + pixelLightCount: 1 + shadows: 1 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + skinWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 1 + realtimeGICPUUsage: 25 + lodBias: 0.7 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 64 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 0} + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: High + pixelLightCount: 2 + shadows: 2 + shadowResolution: 1 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 40 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + skinWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + realtimeGICPUUsage: 50 + lodBias: 1 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 256 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 0} + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Very High + pixelLightCount: 3 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 70 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + skinWeights: 4 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + realtimeGICPUUsage: 50 + lodBias: 1.5 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 1024 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 0} + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Ultra + pixelLightCount: 4 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 4 + shadowDistance: 150 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + skinWeights: 255 + textureQuality: 0 + anisotropicTextures: 2 + antiAliasing: 2 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + realtimeGICPUUsage: 100 + lodBias: 2 + maximumLODLevel: 0 + streamingMipmapsActive: 0 + streamingMipmapsAddAllCameras: 1 + streamingMipmapsMemoryBudget: 512 + streamingMipmapsRenderersPerFrame: 512 + streamingMipmapsMaxLevelReduction: 2 + streamingMipmapsMaxFileIORequests: 1024 + particleRaycastBudget: 4096 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + asyncUploadPersistentBuffer: 1 + resolutionScalingFixedDPIFactor: 1 + customRenderPipeline: {fileID: 0} + excludedTargetPlatforms: [] + m_PerPlatformDefaultQuality: + Android: 2 + EmbeddedLinux: 5 + GameCoreScarlett: 5 + GameCoreXboxOne: 5 + LinuxHeadlessSimulation: 5 + Lumin: 5 + Nintendo Switch: 5 + PS4: 5 + PS5: 5 + Server: 5 + Stadia: 5 + Standalone: 5 + WebGL: 3 + Windows Store Apps: 5 + XboxOne: 5 + iPhone: 2 + tvOS: 2 diff --git a/xiaofang/ProjectSettings/SceneTemplateSettings.json b/xiaofang/ProjectSettings/SceneTemplateSettings.json new file mode 100644 index 00000000..5e97f839 --- /dev/null +++ b/xiaofang/ProjectSettings/SceneTemplateSettings.json @@ -0,0 +1,121 @@ +{ + "templatePinStates": [], + "dependencyTypeInfos": [ + { + "userAdded": false, + "type": "UnityEngine.AnimationClip", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.Animations.AnimatorController", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.AnimatorOverrideController", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.Audio.AudioMixerController", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.ComputeShader", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.Cubemap", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.GameObject", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.LightingDataAsset", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.LightingSettings", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Material", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.MonoScript", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.PhysicMaterial", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.PhysicsMaterial2D", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.VolumeProfile", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.SceneAsset", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.Shader", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.ShaderVariantCollection", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.Texture", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Texture2D", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Timeline.TimelineAsset", + "defaultInstantiationMode": 0 + } + ], + "defaultDependencyTypeInfo": { + "userAdded": false, + "type": "", + "defaultInstantiationMode": 1 + }, + "newSceneOverride": 0 +} \ No newline at end of file diff --git a/xiaofang/ProjectSettings/ShaderGraphSettings.asset b/xiaofang/ProjectSettings/ShaderGraphSettings.asset new file mode 100644 index 00000000..9b28428b --- /dev/null +++ b/xiaofang/ProjectSettings/ShaderGraphSettings.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 61 + 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: de02f9e1d18f588468e474319d09a723, type: 3} + m_Name: + m_EditorClassIdentifier: + customInterpolatorErrorThreshold: 32 + customInterpolatorWarningThreshold: 16 diff --git a/xiaofang/ProjectSettings/TagManager.asset b/xiaofang/ProjectSettings/TagManager.asset new file mode 100644 index 00000000..1c92a784 --- /dev/null +++ b/xiaofang/ProjectSettings/TagManager.asset @@ -0,0 +1,43 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!78 &1 +TagManager: + serializedVersion: 2 + tags: [] + layers: + - Default + - TransparentFX + - Ignore Raycast + - + - Water + - UI + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + m_SortingLayers: + - name: Default + uniqueID: 0 + locked: 0 diff --git a/xiaofang/ProjectSettings/TimeManager.asset b/xiaofang/ProjectSettings/TimeManager.asset new file mode 100644 index 00000000..558a017e --- /dev/null +++ b/xiaofang/ProjectSettings/TimeManager.asset @@ -0,0 +1,9 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!5 &1 +TimeManager: + m_ObjectHideFlags: 0 + Fixed Timestep: 0.02 + Maximum Allowed Timestep: 0.33333334 + m_TimeScale: 1 + Maximum Particle Timestep: 0.03 diff --git a/xiaofang/ProjectSettings/UnityConnectSettings.asset b/xiaofang/ProjectSettings/UnityConnectSettings.asset new file mode 100644 index 00000000..a27ab5f2 --- /dev/null +++ b/xiaofang/ProjectSettings/UnityConnectSettings.asset @@ -0,0 +1,38 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!310 &1 +UnityConnectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 1 + m_Enabled: 0 + m_TestMode: 0 + m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events + m_EventUrl: https://cdp.cloud.unity3d.com/v1/events + m_ConfigUrl: https://config.uca.cloud.unity3d.com + m_DashboardUrl: https://dashboard.unity3d.com + m_CNEventUrl: https://cdp.cloud.unity.cn/v1/events + m_CNConfigUrl: https://cdp.cloud.unity.cn/config + m_TestInitMode: 0 + CrashReportingSettings: + m_EventUrl: https://perf-events.cloud.unity.cn + m_Enabled: 0 + m_LogBufferSize: 10 + m_CaptureEditorExceptions: 1 + UnityPurchasingSettings: + m_Enabled: 0 + m_TestMode: 0 + UnityAnalyticsSettings: + m_Enabled: 0 + m_TestMode: 0 + m_InitializeOnStartup: 1 + m_PackageRequiringCoreStatsPresent: 0 + UnityAdsSettings: + m_Enabled: 0 + m_InitializeOnStartup: 1 + m_TestMode: 0 + m_IosGameId: + m_AndroidGameId: + m_GameIds: {} + m_GameId: + PerformanceReportingSettings: + m_Enabled: 0 diff --git a/xiaofang/ProjectSettings/VFXManager.asset b/xiaofang/ProjectSettings/VFXManager.asset new file mode 100644 index 00000000..bd59660b --- /dev/null +++ b/xiaofang/ProjectSettings/VFXManager.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!937362698 &1 +VFXManager: + m_ObjectHideFlags: 0 + m_IndirectShader: {fileID: 0} + m_CopyBufferShader: {fileID: 0} + m_SortShader: {fileID: 0} + m_StripUpdateShader: {fileID: 0} + m_EmptyShader: {fileID: 0} + m_RenderPipeSettingsPath: + m_FixedTimeStep: 0.016666668 + m_MaxDeltaTime: 0.05 + m_CompiledVersion: 0 + m_RuntimeVersion: 0 + m_RuntimeResources: {fileID: 0} diff --git a/xiaofang/ProjectSettings/VersionControlSettings.asset b/xiaofang/ProjectSettings/VersionControlSettings.asset new file mode 100644 index 00000000..dca28814 --- /dev/null +++ b/xiaofang/ProjectSettings/VersionControlSettings.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!890905787 &1 +VersionControlSettings: + m_ObjectHideFlags: 0 + m_Mode: Visible Meta Files + m_CollabEditorSettings: + inProgressEnabled: 1 diff --git a/xiaofang/ProjectSettings/boot.config b/xiaofang/ProjectSettings/boot.config new file mode 100644 index 00000000..e69de29b diff --git a/xiaofang/UserSettings/EditorUserSettings.asset b/xiaofang/UserSettings/EditorUserSettings.asset new file mode 100644 index 00000000..2f2d1262 --- /dev/null +++ b/xiaofang/UserSettings/EditorUserSettings.asset @@ -0,0 +1,56 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!162 &1 +EditorUserSettings: + m_ObjectHideFlags: 0 + serializedVersion: 4 + m_ConfigSettings: + RecentlyUsedSceneGuid-0: + value: 0104025352005d0f0e0d0d2741775c12401519287c297167282a1935b1b13269 + flags: 0 + RecentlyUsedSceneGuid-1: + value: 5a520c0256040b0b0f5d5a7643775914474e412e2f70243678704c6ae0e16c6d + flags: 0 + RecentlyUsedSceneGuid-2: + value: 02550255060d590c0c0b097016770b12444f1e2b7e2a2534797f4b60b6e46c60 + flags: 0 + RecentlyUsedSceneGuid-3: + value: 5b575500010c51595a5b097b12770b15134f1a797b2d22367b2f4c32e6e3306d + flags: 0 + RecentlyUsedSceneGuid-4: + value: 0505045503005e025e0d082040770d14154f4d7f7e2d27637e7b4431b5e23239 + flags: 0 + RecentlyUsedSceneGuid-5: + value: 00080756500d0d0355580a7049770a44454e19732f7b7f3575794566b2b6376a + flags: 0 + RecentlyUsedSceneGuid-6: + value: 0754035e5454585d545e5f7345775e494e164e7b7b2a71687b2d4e65e3b36768 + flags: 0 + RecentlyUsedSceneGuid-7: + value: 5205565304515d5f5d5e0f7b16775d41474f1b7e7b7176657a281962e3b56c68 + flags: 0 + RecentlyUsedSceneGuid-8: + value: 550903565c575c0f0b575a7611775e124e151b7e797f20657e7a1836e7e26d69 + flags: 0 + RecentlyUsedSceneGuid-9: + value: 50030c075306580b5f5b5d2645775d49434e48797e717e682f7b1f65e3b46c68 + flags: 0 + vcSharedLogLevel: + value: 0d5e400f0650 + flags: 0 + m_VCAutomaticAdd: 1 + m_VCDebugCom: 0 + m_VCDebugCmd: 0 + m_VCDebugOut: 0 + m_SemanticMergeMode: 2 + m_DesiredImportWorkerCount: 3 + m_StandbyImportWorkerCount: 2 + m_IdleImportWorkerShutdownDelay: 60000 + m_VCShowFailedCheckout: 1 + m_VCOverwriteFailedCheckoutAssets: 1 + m_VCProjectOverlayIcons: 1 + m_VCHierarchyOverlayIcons: 1 + m_VCOtherOverlayIcons: 1 + m_VCAllowAsyncUpdate: 1 + m_VCScanLocalPackagesOnConnect: 1 + m_ArtifactGarbageCollection: 1 diff --git a/xiaofang/UserSettings/Search.settings b/xiaofang/UserSettings/Search.settings new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/xiaofang/UserSettings/Search.settings @@ -0,0 +1 @@ +{} \ No newline at end of file